From 6df7fae6257cd95fde4457b3e81c8376d0b48b78 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Sat, 3 Apr 2021 15:13:00 +0300 Subject: [PATCH] Add drawTime option to filler plugin (#8796) --- docs/.vuepress/config.js | 1 + docs/charts/area.md | 5 +- docs/samples/area/line-drawtime.md | 108 ++++++++++++++++++ src/plugins/plugin.filler.js | 55 +++++---- .../plugin.filler/line/before-dataset-draw.js | 41 +++++++ .../line/before-dataset-draw.png | Bin 0 -> 29145 bytes .../line/before-datasets-draw.js | 41 +++++++ .../line/before-datasets-draw.png | Bin 0 -> 32599 bytes .../boundary/end-span.json} | 0 .../boundary/end-span.png} | Bin .../boundary/end.json} | 0 .../boundary/end.png} | Bin .../boundary/origin-span-dual.json} | 0 .../boundary/origin-span-dual.png} | Bin .../boundary/origin-span.json} | 0 .../boundary/origin-span.png} | Bin .../boundary/origin-spline-above.json} | 0 .../boundary/origin-spline-above.png} | Bin .../boundary/origin-spline-span.json} | 0 .../boundary/origin-spline-span.png} | Bin .../boundary/origin-spline.json} | 0 .../boundary/origin-spline.png} | Bin .../boundary/origin-stepped-span.json} | 0 .../boundary/origin-stepped-span.png} | Bin .../boundary/origin-stepped.json} | 0 .../boundary/origin-stepped.png} | Bin .../boundary/origin.json} | 0 .../boundary/origin.png} | Bin .../boundary/start-span.json} | 0 .../boundary/start-span.png} | Bin .../boundary/start.json} | 0 .../boundary/start.png} | Bin .../dataset/border.json} | 0 .../dataset/border.png} | Bin .../dataset/dual.json} | 0 .../dataset/dual.png} | Bin .../dataset/interpolated.js} | 0 .../dataset/interpolated.png} | Bin .../dataset/no-border.json} | 0 .../dataset/no-border.png} | Bin .../dataset/span-dual.json} | 0 .../dataset/span-dual.png} | Bin .../dataset/span.json} | 0 .../dataset/span.png} | Bin .../dataset/spline-span-above.json} | 0 .../dataset/spline-span-above.png} | Bin .../dataset/spline-span-below.json} | 0 .../dataset/spline-span-below.png} | Bin .../dataset/spline-span.json} | 0 .../dataset/spline-span.png} | Bin .../dataset/spline.json} | 0 .../dataset/spline.png} | Bin .../dataset/stepped.json} | 0 .../dataset/stepped.png} | Bin .../points-outside-canvas-initial.js | 0 .../points-outside-canvas-initial.png | Bin .../points-outside-canvas-update.js | 0 .../points-outside-canvas-update.png | Bin .../{fill-line-stack.json => line/stack.json} | 0 .../{fill-line-stack.png => line/stack.png} | Bin .../{fill-line-value.json => line/value.json} | 0 .../{fill-line-value.png => line/value.png} | Bin .../boundary/end-circular.json} | 0 .../boundary/end-circular.png} | Bin .../boundary/end-span.json} | 0 .../boundary/end-span.png} | Bin .../boundary/end.json} | 0 .../boundary/end.png} | Bin .../boundary/origin-circular.json} | 0 .../boundary/origin-circular.png} | Bin .../boundary/origin-span.json} | 0 .../boundary/origin-span.png} | Bin .../boundary/origin-spline-span.json} | 0 .../boundary/origin-spline-span.png} | Bin .../boundary/origin-spline.json} | 0 .../boundary/origin-spline.png} | Bin .../boundary/origin.json} | 0 .../boundary/origin.png} | Bin .../boundary/start-circular.json} | 0 .../boundary/start-circular.png} | Bin .../boundary/start-span.json} | 0 .../boundary/start-span.png} | Bin .../boundary/start.json} | 0 .../boundary/start.png} | Bin .../dataset/border.json} | 0 .../dataset/border.png} | Bin .../dataset/default.json} | 0 .../dataset/default.png} | Bin .../dataset/order.js} | 0 .../dataset/order.png} | Bin .../dataset/span.json} | 0 .../dataset/span.png} | Bin .../dataset/spline.json} | 0 .../dataset/spline.png} | Bin .../value.json} | 0 .../{fill-radar-value.png => radar/value.png} | Bin types/index.esm.d.ts | 1 + 97 files changed, 226 insertions(+), 26 deletions(-) create mode 100644 docs/samples/area/line-drawtime.md create mode 100644 test/fixtures/plugin.filler/line/before-dataset-draw.js create mode 100644 test/fixtures/plugin.filler/line/before-dataset-draw.png create mode 100644 test/fixtures/plugin.filler/line/before-datasets-draw.js create mode 100644 test/fixtures/plugin.filler/line/before-datasets-draw.png rename test/fixtures/plugin.filler/{fill-line-boundary-end-span.json => line/boundary/end-span.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-end-span.png => line/boundary/end-span.png} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-end.json => line/boundary/end.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-end.png => line/boundary/end.png} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-span-dual.json => line/boundary/origin-span-dual.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-span-dual.png => line/boundary/origin-span-dual.png} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-span.json => line/boundary/origin-span.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-span.png => line/boundary/origin-span.png} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-spline-above.json => line/boundary/origin-spline-above.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-spline-above.png => line/boundary/origin-spline-above.png} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-spline-span.json => line/boundary/origin-spline-span.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-spline-span.png => line/boundary/origin-spline-span.png} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-spline.json => line/boundary/origin-spline.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-spline.png => line/boundary/origin-spline.png} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-stepped-span.json => line/boundary/origin-stepped-span.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-stepped-span.png => line/boundary/origin-stepped-span.png} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-stepped.json => line/boundary/origin-stepped.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin-stepped.png => line/boundary/origin-stepped.png} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin.json => line/boundary/origin.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-origin.png => line/boundary/origin.png} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-start-span.json => line/boundary/start-span.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-start-span.png => line/boundary/start-span.png} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-start.json => line/boundary/start.json} (100%) rename test/fixtures/plugin.filler/{fill-line-boundary-start.png => line/boundary/start.png} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-border.json => line/dataset/border.json} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-border.png => line/dataset/border.png} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-dual.json => line/dataset/dual.json} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-dual.png => line/dataset/dual.png} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-interpolated.js => line/dataset/interpolated.js} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-interpolated.png => line/dataset/interpolated.png} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset.json => line/dataset/no-border.json} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset.png => line/dataset/no-border.png} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-span-dual.json => line/dataset/span-dual.json} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-span-dual.png => line/dataset/span-dual.png} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-span.json => line/dataset/span.json} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-span.png => line/dataset/span.png} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-spline-span-above.json => line/dataset/spline-span-above.json} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-spline-span-above.png => line/dataset/spline-span-above.png} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-spline-span-below.json => line/dataset/spline-span-below.json} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-spline-span-below.png => line/dataset/spline-span-below.png} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-spline-span.json => line/dataset/spline-span.json} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-spline-span.png => line/dataset/spline-span.png} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-spline.json => line/dataset/spline.json} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-spline.png => line/dataset/spline.png} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-stepped.json => line/dataset/stepped.json} (100%) rename test/fixtures/plugin.filler/{fill-line-dataset-stepped.png => line/dataset/stepped.png} (100%) rename test/fixtures/plugin.filler/{ => line}/points-outside-canvas-initial.js (100%) rename test/fixtures/plugin.filler/{ => line}/points-outside-canvas-initial.png (100%) rename test/fixtures/plugin.filler/{ => line}/points-outside-canvas-update.js (100%) rename test/fixtures/plugin.filler/{ => line}/points-outside-canvas-update.png (100%) rename test/fixtures/plugin.filler/{fill-line-stack.json => line/stack.json} (100%) rename test/fixtures/plugin.filler/{fill-line-stack.png => line/stack.png} (100%) rename test/fixtures/plugin.filler/{fill-line-value.json => line/value.json} (100%) rename test/fixtures/plugin.filler/{fill-line-value.png => line/value.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-end-circular.json => radar/boundary/end-circular.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-end-circular.png => radar/boundary/end-circular.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-end-span.json => radar/boundary/end-span.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-end-span.png => radar/boundary/end-span.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-end.json => radar/boundary/end.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-end.png => radar/boundary/end.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-origin-circular.json => radar/boundary/origin-circular.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-origin-circular.png => radar/boundary/origin-circular.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-origin-span.json => radar/boundary/origin-span.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-origin-span.png => radar/boundary/origin-span.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-origin-spline-span.json => radar/boundary/origin-spline-span.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-origin-spline-span.png => radar/boundary/origin-spline-span.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-origin-spline.json => radar/boundary/origin-spline.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-origin-spline.png => radar/boundary/origin-spline.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-origin.json => radar/boundary/origin.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-origin.png => radar/boundary/origin.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-start-circular.json => radar/boundary/start-circular.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-start-circular.png => radar/boundary/start-circular.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-start-span.json => radar/boundary/start-span.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-start-span.png => radar/boundary/start-span.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-start.json => radar/boundary/start.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-boundary-start.png => radar/boundary/start.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-dataset-border.json => radar/dataset/border.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-dataset-border.png => radar/dataset/border.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-dataset.json => radar/dataset/default.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-dataset.png => radar/dataset/default.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-dataset-order.js => radar/dataset/order.js} (100%) rename test/fixtures/plugin.filler/{fill-radar-dataset-order.png => radar/dataset/order.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-dataset-span.json => radar/dataset/span.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-dataset-span.png => radar/dataset/span.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-dataset-spline.json => radar/dataset/spline.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-dataset-spline.png => radar/dataset/spline.png} (100%) rename test/fixtures/plugin.filler/{fill-radar-value.json => radar/value.json} (100%) rename test/fixtures/plugin.filler/{fill-radar-value.png => radar/value.png} (100%) diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index a5a4ba771..b23375e1a 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -133,6 +133,7 @@ module.exports = { children: [ 'area/line-boundaries', 'area/line-datasets', + 'area/line-drawtime', 'area/line-stacked', 'area/radar' ] diff --git a/docs/charts/area.md b/docs/charts/area.md index 05e16a1e5..f37515e49 100644 --- a/docs/charts/area.md +++ b/docs/charts/area.md @@ -64,9 +64,12 @@ new Chart(ctx, { ## Configuration +Namespace: `options.plugins.filler` + | Option | Type | Default | Description | | :--- | :--- | :--- | :--- | -| [`plugins.filler.propagate`](#propagate) | `boolean` | `true` | Fill propagation when target is hidden. +| `drawTime` | `string` | `beforeDatasetDraw` | Filler draw time. Supported values: `'beforeDatasetDraw'`, `'beforeDatasetsDraw'` +| [`propagate`](#propagate) | `boolean` | `true` | Fill propagation when target is hidden. ### propagate diff --git a/docs/samples/area/line-drawtime.md b/docs/samples/area/line-drawtime.md new file mode 100644 index 000000000..1c45fcb0c --- /dev/null +++ b/docs/samples/area/line-drawtime.md @@ -0,0 +1,108 @@ +# Line Chart drawTime + +```js chart-editor +// +const inputs = { + min: -100, + max: 100, + count: 8, + decimals: 2, + continuity: 1 +}; + +const generateLabels = () => { + return Utils.months({count: inputs.count}); +}; + +Utils.srand(3); +const generateData = () => (Utils.numbers(inputs)); +// + +// +const data = { + labels: generateLabels(), + datasets: [ + { + label: 'Dataset 1', + data: generateData(), + borderColor: Utils.CHART_COLORS.red, + backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red), + fill: true + }, + { + label: 'Dataset 2', + data: generateData(), + borderColor: Utils.CHART_COLORS.blue, + backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue), + fill: true + } + ] +}; +// + +// +let smooth = false; + +const actions = [ + { + name: 'drawTime: beforeDatasetDraw (default)', + handler: (chart) => { + chart.options.plugins.filler.drawTime = 'beforeDatasetDraw'; + chart.update(); + } + }, + { + name: 'drawTime: beforeDatasetsDraw', + handler: (chart) => { + chart.options.plugins.filler.drawTime = 'beforeDatasetsDraw'; + chart.update(); + } + }, + { + name: 'Randomize', + handler(chart) { + chart.data.datasets.forEach(dataset => { + dataset.data = generateData(); + }); + chart.update(); + } + }, + { + name: 'Smooth', + handler(chart) { + smooth = !smooth; + chart.options.elements.line.tension = smooth ? 0.4 : 0; + chart.update(); + } + } +]; +// + +// +const config = { + type: 'line', + data: data, + options: { + plugins: { + filler: { + propagate: false, + }, + title: { + display: true, + text: (ctx) => 'drawTime: ' + ctx.chart.options.plugins.filler.drawTime + } + }, + pointBackgroundColor: '#fff', + radius: 10, + interaction: { + intersect: false, + } + }, +}; +// + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/src/plugins/plugin.filler.js b/src/plugins/plugin.filler.js index a7e4dfeac..8ecb7b064 100644 --- a/src/plugins/plugin.filler.js +++ b/src/plugins/plugin.filler.js @@ -516,12 +516,25 @@ function doFill(ctx, cfg) { ctx.restore(); } +function drawfill(ctx, source, area) { + const target = getTarget(source); + const {line, scale} = source; + const lineOpts = line.options; + const fillOption = lineOpts.fill; + const color = lineOpts.backgroundColor; + const {above = color, below = color} = fillOption || {}; + if (target && line.points.length) { + clipArea(ctx, area); + doFill(ctx, {line, target, above, below, area, scale}); + unclipArea(ctx); + } +} + export default { id: 'filler', afterDatasetsUpdate(chart, _args, options) { const count = (chart.data.datasets || []).length; - const propagate = options.propagate; const sources = []; let meta, i, line, source; @@ -537,7 +550,7 @@ export default { fill: decodeFill(line, i, count), chart, scale: meta.vScale, - line + line, }; } @@ -551,47 +564,39 @@ export default { continue; } - source.fill = resolveTarget(sources, i, propagate); + source.fill = resolveTarget(sources, i, options.propagate); } }, - beforeDatasetsDraw(chart) { + beforeDatasetsDraw(chart, _args, options) { const metasets = chart.getSortedVisibleDatasetMetas(); const area = chart.chartArea; - let i, meta; - for (i = metasets.length - 1; i >= 0; --i) { - meta = metasets[i].$filler; + for (let i = metasets.length - 1; i >= 0; --i) { + const source = metasets[i].$filler; - if (meta) { - meta.line.updateControlPoints(area); + if (source) { + source.line.updateControlPoints(area); + + if (options.drawTime === 'beforeDatasetsDraw') { + drawfill(chart.ctx, source, area); + } } } }, - beforeDatasetDraw(chart, args) { - const area = chart.chartArea; - const ctx = chart.ctx; + beforeDatasetDraw(chart, args, options) { const source = args.meta.$filler; - if (!source || source.fill === false) { + if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') { return; } - const target = getTarget(source); - const {line, scale} = source; - const lineOpts = line.options; - const fillOption = lineOpts.fill; - const color = lineOpts.backgroundColor; - const {above = color, below = color} = fillOption || {}; - if (target && line.points.length) { - clipArea(ctx, area); - doFill(ctx, {line, target, above, below, area, scale}); - unclipArea(ctx); - } + drawfill(chart.ctx, source, chart.chartArea); }, defaults: { - propagate: true + propagate: true, + drawTime: 'beforeDatasetDraw' } }; diff --git a/test/fixtures/plugin.filler/line/before-dataset-draw.js b/test/fixtures/plugin.filler/line/before-dataset-draw.js new file mode 100644 index 000000000..3c89a45f6 --- /dev/null +++ b/test/fixtures/plugin.filler/line/before-dataset-draw.js @@ -0,0 +1,41 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: ['15:00', '16:00', '17:00', '18:00', '19:00', '20:00'], + datasets: [ + { + borderColor: '#00ADEE80', + backgroundColor: '#00ADEE', + data: [0, 1, 1, 2, 2, 0], + }, + { + borderColor: '#BD262880', + backgroundColor: '#BD2628', + data: [0, 2, 2, 1, 1, 1], + } + ] + }, + options: { + borderWidth: 4, + fill: true, + radius: 20, + pointBackgroundColor: '#ffff', + cubicInterpolationMode: 'monotone', + plugins: { + legend: false, + filler: { + drawTime: 'beforeDatasetDraw' + } + }, + scales: { + x: { + display: false, + }, + y: { + display: false + } + } + } + } +}; diff --git a/test/fixtures/plugin.filler/line/before-dataset-draw.png b/test/fixtures/plugin.filler/line/before-dataset-draw.png new file mode 100644 index 0000000000000000000000000000000000000000..b69852d2d78709891916d349199f3b679a11b435 GIT binary patch literal 29145 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 VY+UbShyP_GM9?$SEzu!f{~sM&VbTBq literal 0 HcmV?d00001 diff --git a/test/fixtures/plugin.filler/line/before-datasets-draw.js b/test/fixtures/plugin.filler/line/before-datasets-draw.js new file mode 100644 index 000000000..3b06f3fbd --- /dev/null +++ b/test/fixtures/plugin.filler/line/before-datasets-draw.js @@ -0,0 +1,41 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: ['15:00', '16:00', '17:00', '18:00', '19:00', '20:00'], + datasets: [ + { + borderColor: '#00ADEE80', + backgroundColor: '#00ADEE', + data: [0, 1, 1, 2, 2, 0], + }, + { + borderColor: '#BD262880', + backgroundColor: '#BD2628', + data: [0, 2, 2, 1, 1, 1], + } + ] + }, + options: { + borderWidth: 4, + fill: true, + radius: 20, + pointBackgroundColor: '#ffff', + cubicInterpolationMode: 'monotone', + plugins: { + legend: false, + filler: { + drawTime: 'beforeDatasetsDraw' + } + }, + scales: { + x: { + display: false, + }, + y: { + display: false + } + } + } + } +}; diff --git a/test/fixtures/plugin.filler/line/before-datasets-draw.png b/test/fixtures/plugin.filler/line/before-datasets-draw.png new file mode 100644 index 0000000000000000000000000000000000000000..9178b85283558b7ec3e5ed739b82f9a9278d1fc0 GIT binary patch literal 32599 zcmZsC1yt10x9-d^AR$PHba$g5A%k?MASj_UlF}gzBHbt{jkJIW2-1plHz+CH(#^ax z{_lPFz4hK&vlgs%erNA*e|zuKJ6uac5g+$1E(8L>S5}hKfk0s3Ul;@%3;a3q8oPi% z7$C}WGJ0Mn+fBaj$yQSLPe`{iCP*omKpCZg&5<3JTn!sR{1y?lT`$=1-J44; znfI~V`(-cM)Zn>ee0p70^NdNq>3Cwz`(?}El9(8cP?K`r zlBUv}9H#BVdtt=F6iey(M#Sxis0Z#GDB_RVJj%3lN^et7f8`!%l>O{Y=2A*XQ%<<6 zMEW9K*(R)Zp8<#T<*3kc0*iax;G_&S*LTTeFVyBEUYtk5;Wz_O;-6Dax3&4>X_lxH z#g$1VY|OHQnuS!)%f7Gjz?2{~r2M-_%qDwGGNjaS;t%%>j1zn<4R`;_wI@BMEmN@$ zcJPAGKjt-)U2*X=%(nFvWwT#cOya;>PGK`CdYTSIY=hi*iKs%zk^o>UtB&N z612qLT~Wm+jpk!wa$MV&<8Cwe7FD);oB$P=g!Eq+$3vdb2SwTa4ejWVr!#z(O1Vg) zo&EJ|u9wN^GgEo_=)$_X5fW^@us{T+d|r-?z!WttT{9^a%{G;k=kAf&*6_PwGl6um zR5jWcVs-c#BU5K2w9?AG#LRw7T$xf0Uq3&$3aV&q{H3d>$4O4E?*$9w;w0TnR?u6; zkYX;>@Vrg);1$<5w+CD`Ub#85W|;-uuATJJS5rJLkO?wEkBqY>;m6y~)$@;XuwtFR>Thbj-w_cBVkIpx|LKXY!@6)%0694ZlAGhb_mF~-YMla?;7{e74a`T3qD-TIXV zf9D@g*LwNnOzEvqSlNBMi7%S@P4)iw+-^9H4Rw@9d+ZLY_KX5Gm*8j-WJhStT%=zBc_&90G{bn`ybqPP`a{ z6(kiDD(!tZ(y&MOo>ke(6mk1j?egnC`EGKoAI_+%3|L$&YxdH%xFoqFBp)T>R(uD^knI`*N^0kS)jiT6<-FbAmc)aC;+W`|PvmE1`+ME95@eJ|B{N zhY~Nj^85!C{2Ph)&YT)c#$2m3KQcAXAvv^Mi+k!PW$vk;gXiCt_*-r+ z5}PAl$=^3$ea!9nn3%VwYVhqh5pfmSot?4EU1-GZ+Z>^Cp`i^}1hl_qFK=!sF54VE zGhsK`k5M8mIvBL`n`HC6B6}FPoBoG+_o~J|owS-j>FC$F0A~IZ#c`4Zi4)_f?HE?r zt6Rr+?7M#}!k#uvmp(DwCh2v|+P-|&IT$|vg{#79HJz~fNWmsRQ}4OIJQMP#sw&BS zcT*Nf!JmO`3km8qsqeJ$6`wwR_PB0}_3G^@IE-iQ@7Me07QPxIef&vMr>V~RPH=sL zw;szez2w9AO zc!{372SYK2g&6waF73{A)oJjJY^cUxW~d;s58s}ZY26`(yha@?lDnyDLStWQo2&>a zag#Xy&`2+*Y^fzTTG8^?yz4jJKen3`gCYL@FO=$)cyI`AKTP&iZmr^ zYsz+~vLnMc=05~B=1o~Jx@-TWv-sApuFoyg#F<9dx7OPD8v{6BG3_NlzFx7~l1N*5 z`zd^HIu8C*GgCm3=xcL57DW~r<%r?W^LfQhDHZ?B?@zFz02Nfkh5dS0goJx%LbrJE z%6nPbeW^_|%s(KNh*n!jnl9C2Z>soeysKOHQo_`G<=F3TA{$+eNME|-d3i%KUs!Hz zQv~PMZjbj^R(S>+yGhfnx!*n;t$}SWcY>^8GrZ<(QirD6I~gq{9j9^HwDCPz^mz6U zNOUp{6fJR`q^Nzqx-Uln&x&iSwlfevJ&MN-o9|y$&4tE@5lvv_F&b$)O;zF@kF71c#*(b%JCdvy*K-%0bl3HTbzTvMILUWO+}RKyNw#KAK3FR@ z)L$6ynElL>nZ)`zQZc~e^`^{~xgdMA#yb;-vPzb?z0kP9hoJ>9!~I~f-m@g&ozk)( z_u?P1&lG>vE{hJt7JkMZ-3)3(I~wSdZ0`lI?a@T31w^UO+`&PHe;&af&S|1e-+S!kRf+|*FwdRr4EA0wwQb7AkJs5`1)qF%Xr^4p0sb+S5*qc&zIZnp}vDjIF&6ZzVI)E}x`QRNZxpS(AaqF}FUuqe*u?c-B+k*%0^zKP-1rEag2&&kfq#o#v+em;GV_cZqGY#igRs=J>)d!~iT=a*vjl7jlL znv$AoeplO#zwsAuI=A*yIsZ}Gf)e#7UFb1HCi5M*u1TyV`V`oII+gxTaWysrsXTT% z>Da5NA|Z_DJZsYo(!BF_MVq*N?OCl&|HSTbCNcDlqKr$6c$?X|(I4_+ew#f;8+!K8pYIU<3n zVs>s~71z}u)n)%ybF$<`#qZBDrv^MV@MwBW0as2^l|EP)i-V#2c8Ww&`AWMr{5f;Q zMu1ZWio0=SM%NY3?e(lCp3_{iM1ThDp(x(aJj%12D!#+|*>3S6e?$3?s)?TAmb=s@ z$$=C$o3UMMH|Jh|=Se9RZj^WZX7X!fjH;!HA(5?zwx0Jy##C-vNp4C?5^Q519?+U> zI8D3@uzeo=qEO!&sxX)(eKZ~U)bx+#O9Of*_jV?_9&ywg>!!`8pU*nK&2=*K@kPTj1aL zP7TR}8K7OTG?UPxy=wzr)8?Y9dihiG{!IDCh1l^A7tf4h>e$7UpmcIqH2F17 z_VBGcG|FZ=H8~v4;HqE0SNt$C^I`$xltL}_OSVtH9ao05>FJ?`?!vUGqxSaEu5p9t z9h!$Ti{ye1YcmCV`&&uEE$7jDU;-*8b9(wQvNN3i8V|*Pex#XoDPv({Ge)*6Z{LJs zXQK#X)$HRti$SpX1^7R|udZ`yt|#%DgUb`ORJjmKCb$!5x7I+hKgpZ?*n6!!o5`#>c~)QW`T#^xa^b^h!kV5MfQQ2NGl zbnY^1{mXc;-595B?I)biRmJC*b0Z0@N1gPjmsVz>ihOoFXNd?CwkPWK&nj75{cwzG zg#WDgi}s70j<@Xp64z8dJaK#a_txv@50p+dFK*;cLv~OBSF-`f@x48E{AHgiHR{w> z+qYnnv*db7*f*Ev-%%KMT7OM|UF@Tq8LIsa>YHBEt7wJ@6A5<(J6JZ~o$U}f;`Mcf z^TpBTFWrE<_N3gH58Zcu>%q%dGBKBgt7QH zSp`N13B-NcRDu=KXS@%wh`4GgV-6_&`5j+5Irv(MuTTLNhu1_CTXSfm_nJ-0?_fFj zu;qG|D0SIUhVU#k!&TI& z+&J80Oue)nqD7h+iU^9%{<`t15&6nl{g(cWa?D3#(XS z`3;L`pjJW6{vgk9ZP+pyCF-mD@+}p2M)1+!C2KjD8I=zcdn1;Y%OKq*YTX=aFVB^v!9Oqozyyx4m z>LU%vVF@ei#aTB;dwFfljH0}7y-gC_o8L37roUYn8R*UrZzFxh100_V_4A$#nG0X( zJ!KdosVY0iHM4u#`3Ny_eH86(#R4JkkTu4wd$lowNhZqIJkO_-R!{nw6nD5AbxALm zV8O`Rq)AJ?@_6J zX#w(Jn3V_9-p}{dAF4RW6UuwX=7=lH`VG_RpWLIB7-&sr&N5(vj z#awbHQYQ1>$5P0R*nsnwb0Z@@60Zr)eryF~=PY&3?qebBDCOg={C7%O$Vua(AKp^S zXgS}BRn*AZ^=KDr@w|J^|<^@P1wEYNq@Tth1630+@TG6dudSPDZb zJ0Vx(5O%1?8O>+$rICAFwbw6w|57}`nktzHIB%So4V*A-;I;ePF|(SOtHeD%IQk{~ z{_D{tl}?NH0)If)yr%Wd;aU&JkFuxd$CJ9_{i239_mOs}(E5g_gO1*dmjlaKg`|Ln}1_rD30pc z%cOefUeZf84^d*JLa`yt!>tdPN3Z9J!{kacRS(x}yfIsI!qiYR#AMcB?me5X!EHM``y;TYB=J?57&Jv)q;Rj2UP; z+L~H7b$&?_Zh1c+ue@M0k-Ix0l|rNLY+U+g`_6_5K~C`jlf&zcT+WLgW6v_aG^s7}-M9j&FT>S? z7^gMWT7#KQEb>flj$5iKh41-4)N?W51-hR)2<+@fra3F;<-NAfLak^r$;#%H(_EM0 zb3Vk=TA_$&9@hHXk5uFkt&;s?Ym<4gW@!_9M`7c9G{>ud=0=!9*8%adV&LeVCh2=c z{wwT`DBcH);^Ks}4J&Fkg$LU$Ehws}oBpuYvo&Ym-r7v(kb6_(V`Dt=b@84Rs1XX$ z^PXPov~kAb!RzxG3KQRqkYB%qKGjHgkl^9j{*t|uP+R?8CGA7;>dCzj)0B%vdc%Yt z#uZIB+giT9g=#umY37|@Dg9q@YyREJjArTW@6XTtb*tdKWs|7Odg9T&ry8+3TiJ52 zpQrkd(0$Zyzv>OjYCWTdmJoIsIE37ZOLsP=OpHN&e0}7dztMdFj(zIKd#u7-JF%B# zwmdb8#@(TQWGnKz^nQOoypWN3zz)6lQvY2`K}Q^(^6r(d^cj+`scL>j7sW}r6cf}E zqKG<;Uq9s3VUU0-gr{tFWxX8nU1%yxCZG{h`!d5BqL>8^1Q&O$bETz-vJVc_S$bwKOL;ik~TD?iZj3#5yx4uMLA>%TBp9z z{K9XH z{m9LW;jZh`naek-X%ln}3+lqxB2`^^SJPoXBT0BO9i9&|ap`((O%GL-VGL^|pwHTV z8E29AFL<^OG%!FvKX>!EKj8ZYo-<*fum7asW=^ru(sJ}$nxvHRH#g-06U5&>!_8ln zvX$4C%DKC<4Yq&ZG2dr-?w{yKMkcb7+0bpEUl0~(8A;B`jkPLH-73u6v_}^v7^|Sj z-&|we+q&3ByFZYnc$2YeS{7`5H6Cn4-1I>V=gG5;j2e%Kz2_AO%&TT`Y2qh(@xO)b z=#KaH!Z}dRiepk-oK+Bt^B`&O>GRUc7*?n%S5r^t8@a&u`ET|<9j{%rBmCzEzXqt9 zZddhC$R327rqjLN*HNNlOpsW=*<9nXcM&_L1ZP82)rLjF&^MjT6LZ(W(s#xt`BzIy zGITbstop-ShYEMbP{WGhL^f_LN+2P4Pv(0rZ>}8E)dN$W@Cs@n-c6S0|JYEO%NM9H za^VKct};%d1tJv4huo#LFS*RjvtXt1ytgYATwILa{5~i@G%)X0Ms~K%skVQ5;WBbP zdPN;6_2?eT=^l{{-?2>^(Lzj?1jBAv-O}35Pp$2m7OiH}U3Ck4!Yao=v@L8wr(`xOX9;%tpl=z$?-}OCf!_dNASkRa)de-vM^! zv7gq))wys_MT=u_#g|txM%bz^uXgJ%Zt5#OiNuq>t*_@0znj~IkjAgAC5gT8b_kfO zGvAc<3cHZL3CnF`uKe@tx+e>3dvocIO!l7#u0=2Q@q3ma?n~0ieNJov?tR@HMa3E{ zn9SBMbT4yu`B;nZI!ecjY2achhCFl#sIs1KzVlIw_s`($w~X&>hkfKZ zaCKw2o3+z9XbjVMcAMt}yZU2KULST*h53O>bUNJmQENCQN~%S^mD=;9sZuS%OA0fI z>wIr)=SPv-c1C7bbJCp6Hr@+u7iuZJX(4UlR#a^WWEcBooweVDF@8UOf`Q3k1@?hV zd$em|l4-#8!JD+Sb0gk@^}ho9TmBfK1ndccey``GpFYeYiny>U{+f^;rA$G`Cb(TFCJkI>m@hvDc~tTy8rmH zhF{Lb?n$l`1@qW_$`278)e~O*_b0q5!eG2*2O}d~cgSp?cAs0| z&F75Di=Tyh)&f9aHg?^{r*q0vGBtHf?CQ*WM-2VGmiNc7Dy-$#Ixjc7zurQ)>)JF~ zqPK-jn1Z;tP0@~SuynlNdy5?1qz!dVma~>ae{iTs%lXP|xh0-qMnTS9?h#3>Rt49g zmTtHbt4ScP6l~w@ePNkmu6@e811GxRuLKGk>qt39W!m^ZYrKa~PYyVmN7#qnyyEZY zA}*ThZS*EbcJbr(Y=+Blc4V+WBRCD^r`d>YR$%#ANL-wp`^PcrLYUoYC9_WU)5nVa znMO0MpIgQ(VK0Ih@VLX?mY(%~m2*>9&^_y(5N4_f^iQgg|Jj6_TBOKuKChhQ%m0=3 zGBh-7ET=d`eEEC%{QOEjCSHpw)4u&=tx^*Am$aOom))AN9zx%@h{8K9+~O?0g(^v^ z!FCu8ce8J9$a((eDc&`hvpA-sk)55gTgRnQkt)A@Zj6W;@Cxg98Q=5)Y@oJ>R ztQ+)}+P8aUF{F)LPqyVl^=8xU93KjYtKep_5T8+hpI@m->3bkJkeiAW+RCT7hmb?b zU0Jr=Dw#Pxx9itR_XY;s>e#8dxZpC??nW__B;v}=yDYFS8zhc*!oOVM;`|6rklUM? zo4D}tmq}T$t2KG13Y(RCQTZFVez}DUj~_QA>Z2*EGplRM<_10V?Qr3aRkp8AC*L8wXTj+(grmU!MP140CBp;e(WuX5i*<}VL>s(u2ZmJ#Z#MaYO@LiK5X zS^8G+{fd$_CCJ-ZmR={F_b0=$@8-I=vH0qqus{fIGrP*xELKn9q&NCKdMTnrmYfcK<+ z^AQ%yo2#|$Tie;M|NAWfTF>-;oAsA;3TbTQK;-nA-EFGBLIhm_1CD)!&7RW#( zJsh#tZvW}-TGMUp^TBg`DyHlu^DspS0WKrJjrp>%1c?686ToNN=SKy4-BklNMbMzz zxZlAUOf3;zpsfqE&?%u?82+`4maOIhdHkaj&r#P5uwT*&OJjsM$e)3Qsx z@Vtww$ifM^TFVWI(!`K>kb=H)mjc${>W4h;m!Kj%Fb&~tV{DLtyD4RNl(PY{-rj*_ z%fj;W)6O|CZZ>~pEbsHQSqIdJkg{*%5e?yJtCTT=ujKIm>#Kb@g6&*55PllKMtP8x zG_jcedf(P;?I%}$0nkM(4s_w@eI4(+MWvO9vPe^by$+g;YhQ)I2%)spax;MhIJ9s? zC|t$--k}QC+pEG#cQFgkPuS~m2xCKaVCsLGxq9vDO+a(9Wv_GVbI_IWV`XU=ycL=g z1X)Kitmw4+#X%WSDlj5n~u5gaE}frR#QR;$q6$ zprNvGH$+_dCnk`8ZviD3Z$9dh8M9+Nx*09DoNA;DL*BnLG&L>@Gduh&1F7~#9(~HB zMmy8zE8(s8m_$QR85KQnkkFrp2_0I6j#T+Lz5{k_Op9-ulFK13J2~=0lpywWLfAl1 zoc6eD5ITN}CY~?7Vubw?6Eo1m|DVp^e99BhooB@DO=#p0A8xJpY%)SWdv`HFen}#* z9uMvdF)T|58HGeg24mYSEkqgLV}aZ!pn@Z)Z*_K+e3JnjSzF*$dQTHV9q6*IveWA8ye^(|+WX^#CnZCYg% z-amjrG-L%;eo6~e#E|||u~72B2(7|->$A&#F;g~AR`#tD(cg6)-v0q2{qL)fB@Z;v zU+MII-mnEhEh1oUfCny<+W=8t;LTsnd__{rCXA1RA+^fT6prfFb;-)bUqo zx5Wys6t9BCgo_uS>60L_ZQS8P52bheqO?;Rz$oGB{rkpV105~X%~YudGGWNo%7Ghj zg7wAPdOe;Hg5SQC@`IKYxX@LtL8v;H5Q^VkYQ3lgIr>;^Zb%4mf4lJ}*Pb8UF2g;# zLCgT#gpZuP0GFVHPY$UVAa)9?yBO&V=yp%)zRgVrm{oB9&!B&Yd!xECkiPeNncLQ$ z=m^Rbk;6~MA=1L&+47KwnbBTWTZcew+OnteRXor}PUpK%eWC--AdllN34*tV5COW| zvY$L-ecFqRL-9D$-j|e;Lr`O_^l$-3KTiRU7T~yFoUmg7LhQaR)%{W|5C@nR+nZpg zVTf+#Velx4p+!fahaKbnPk89wtlF%=Ns$C_@aa#D@yZYA7}F?g^LG!#wrNTEIED>k z?9ox^H`l$tVRIjp3ldp|95$;=KRhNGuS`SIqLt~_!fvHYE5k``=x0SY@NemfJC%U^ zw8{YnRUxN7iGM|h=JY3EkobQLDg_2vF#>}?bG3L9+93O1LiT#Rz^S+$Q;%g}W_g4l zXS4;jpOHy)f#&U*NA~)npczjoR~-19lnVG9HzcFbw^Nj+%QbK>@TQvXyZ{!{%I zfmThULpF*givVz0%m%oGzu2||Tq=73E?EdQNNIg!*lpXyhz6ck6FN+Dw zR);Nqv`gVd$AQk)XH8>}uk7TU_kdaNhJb8khIAu*VKj9b4z%}+M1dpVixFIC*?RwE z6O@J&3z?N%6=Iv5;kZ0`C)iR?2<^AdT%>Y2wZiUMpJjmDRiBz&q2~J+Y8XNXAk^+E zixz%~hb+I<%nD+JY_(eXa5cmVKu)T_q5bLh_Ktz8Y|M z$AQNH49KpmHeLHlklWu&%CxYNzr3FBxnNT=0`ao%MuQ=82xEcGC)mUg+UHhJN#U*b z-HT$0$Q-o&BGu1uo@GMCRD>KD4Ij$f(Q_K8c|wy#4P}9R+aF!A!A91b$uY`(Y(VSU zQMm(j9cLH$QYk^)6idnwk0C7KDoP(wRmo)+74QX=#d8urA@eIdWZ^tS!aXR({32k3yMna8sCgo2==AU+Zy4*`mT z|IYf^Nuk~9=*UQJN-c+o#E27D&Kw`Qm!laIttEI_fzOm(bEP{F18@D| z3_^m?zd2o;8f{B+H9=%K2~)QGLWLOb|L)5t?XH3Dn_NqP$A5jljubFa`|BIozn8M(5B$aqttbGPLY@T9%R~Q3-mXrw zKs>%-UUXzSznDtXI}7isVl%&5c?1{9bP2I;oy}n6Xz~n#6p3oT7o`itLFbbV!iort z%;Xz5gF$e!M{*Z?5U5r_0f!3>EENrN=&c$%Sf9BqJ3~GxXuzRE7nIA7@!8O0$jW2a z&+YAx;MMY!0vKj8lnf9f2yI~$5v3~dU+Bbh9B3Fa$xKt66EMRBtb?t4`}eq@m3q&K z^VIo;A;}Rf2k*gU1vUm8*s}D#5(knS$Dxekhq== zY#6i+2LTtMabaUez~XRNX-}sG9e%Oo)Ey}&6ukxD#mS>{5oUfcP9X;6qmxb4agq|< zpb+s}YNezWLT-pOo{fqXkrFwy39PMqeEYZp&ghDh%>iG-ORV{8xk0 z3CqWSi%|SwHbQgPimrmuAnQi83MGhiUcZwCpIa=5%}&8B&e<Szw1RDV2~&hnAQ>3y>Rp(QFAQP(6AH0mvQOvYh5GNd zSbtZ!dqOe1Z>zqXnCn*QMeIJ-54}hD83{VzWpfvT%N-_fY$V%{j^YvGvupgVb-#8} zab4jc9~JiD>7QdA)yR zB7N<#fkkYQ>L^tm$rb98DEnv*=JUKgk0qQA0f!!91E{h0=%7#9?!vO~&A3eT!u8H8 z8miMwj9$@Kyy#W+l zFE=t)SKR!5Nv@0{Md^H#%f(-FxFD=8!K^L9@E=M%N2V7bDQ|(Jl(SvZ1aY1vp&F0= zL@09pS*$=2C*mIuhj@PNcu4xm9%g~4X8bQ6i6O4uvJgP%fCp=!#ko_!VSo5QCdzs3 zvL%nRDI+|H0V5aFP!_N^JtK%=26F*ULUeGB5Gy63d{nv2G5i@lE(dQuMLS+wc>eL~ zLfWYPS5Qv*(ccFN2N9tW)DR#D)H~-t{z{QYNvKvbiK zWq(I%`x${jE};09ES6l*mnd|G4>LmrD7{M{9KAv~`==H75AQ_`n!{3i0*b+wbk!xV z@?wM$mPQArQ!FNcmf;zx6d#oLz|>AA4mw=-i4_c$JU3wCW&weXsN)dlg_iwyBM&oZ z)H?!=KmXsx|4+|AdqBbu;JZM>M}UOlDe#OX4B!rQ);>yse@R5?;04_d!?HpTvjr~{ zVP=GmfT2M7$|Yj4q3ZWBeNPab1^0BpNqS9g(Cwl`%9F`hVB+RFYz7XgG(=}1)i%H) zM+M84G1Im;g82XrgV7ucXP`NZ0~})CgCl}kbEgDx)>%>cSWC>yh`?A0>1H^AOyY<@dUgQf`uwXk2Ez2Id@>X8Lng5n$3^kpS!?T&b_4# zg_@&5hP+fM21K^rh7LiBID~kiO)D*9Br;fXOI0BNLf$t30r_{JV^y6+D@g4q3^69B zavyIDD_bF6&H^mLaLGZYrWKR+#IyrFbY_9jDWVD5iDzBAg2jWU#C_h>v}xmu28oAiz#VQpu%-2 z`Nrn|l0ydMSfV2_4IPO&DgPs9ECv1v;N!*s_{K=l_}Zi32=+#R4;KCc;L8X21OdKJ ztLSA0{3Vd94e*gDk-kf6O*x=9^uz;^V}1|4s%;Z^db;&|iq%k80FHQBw>D~6mW0wV zl*Q^RoUlHw0m~RBa1Q2{iwo6akKQv366`ftBm;cmj+)d}!=^(0GTc=kAyH-dqw0f>?byd7p`M-a$Dq?KE{ z@m)DUV6Aai3eSg=_5~hP>sA;C6F>{1ClRQ`vgbgfU62PV_5Y(1phah)Awb(2f_5af z2@B-Gi(p6!GlJ$JK-&w@h61$ql4!I-;B5@EIyUkF?B^mtYYfne0kl@KU}7DkHPzW4@h2qi#MpC=EC!_avQA+`9X zMEAX^yGBkKRJD?8wk0v&KOgy^pA5&zS*lVt%tNxeYFDm6M* z%b&zUEW$}(W=RXqQ+4ok9#p;wB_P3L2@E4+LA>C#4QI1p!};A|)zf!s>MTRdA1w-6 zQ&}}=6y!9LQ940jp6UPfPfuF}9k=RxLP!-nv~7ggxgJ1#4j@iNgK=H!&R1}3@evy; zpz18f!wVG!3{l(y5KTPM5M=?x|L)qsvOo?X{s9obZ)q&x5@`{PVvGlrUV0y7BUm7Y za4MJ?`H*v09ef7Nb0+H#sDnr(CiymPd)Wvljteefg zO2&gJ`xX=&^K7RjA(}x5GB9BLS^bY(Eg%;Oj$E;xOx@!R^m~WWkwE~wIs5?c^Z~#d z2u^|VKYxB{1S`2ZJ-J#LyYEgHuO|1%e>MWB2wDg6W~M=TxMjf3t|tdV86MWgX$lw{ z`e!yC+U)1R6^zZaqiO6o?MELOdgZ?`Ts;m6eJ)CPMia;lwv6Bf1mYj0SVRK0nAicc zPvcFlzhy%$@HJHjIm|31`}0#H*f}36{|y*&KFCu5M^tr$!5L)T2qD7o;Mo!4F3)p* zvfF?Xo(nW3_^P0*P7ox8kz+e439{V6Jq+x^eL9&JeA zUp8yBSOp*!11%Q$*0_Tea?USB2i)s@#0UbOTMT{P5+7!U75BL} z1=u~LnHg6GYmx_skMP)w?LI52{%&pN zgk#~UlFjuQugvJ`$TOPCyb(ryr>D#RHK&p0vwyqEXG!X3<;Bhj{@7EUZqsY%qzJqt z0UFS9h9|P~hpJ>pO7X^7Y~WmYWxlVbuv&cXM75}@BuQgZgd-r9*B5s6Td-;C{Xs)c z^;%caf$ytx(E`15;o8?LqD3VGbbYiuu;#g;F&>|GBkk;vC(FwaoJS7Zv9H+U374f+ zgxr;gid`K#D<`&@{mzxH?y4h(HDC;=&#%R6;>Ee`HpZ5{B!-7@RTQuiKlluMTMGa1 zv~AJ*8@I5u(2||_W8rr`D(2z(1y41VSu-lqR9KXc<{Cc?oohlg5}~RJ7sd4zkv*Z8 z>(5s7HhEWmavnx6jpg(FU-XmpagsYT>dZuy)nfraST^gdl zccP;siS%Mjw!U46hpOb^#>-u+@_t7GC z)%>!$Jl@F4G>g*vRZUZVzMhyX+j(h8*He83bV*lYVmv8=z4uUKCUO`aQD1~YpJid%fLh< z{<}=D_s0O_kESNvJz2d+vcarw^*%oKAJaPNZ@O7dX2|#EtAfcrt~e_t2J7Ei59Wou zxbyftoa;5y<1;wdA!7Gc7dn&L{!@x@BR_06U z*e2DQdsY@7kU1`oYnS*XmHifgk#@xoDkG69>sO7Zcxr78R&F9a9pAZ(AAx3OI zi;7G7aSDmJak}MfRehhBIB^a@DZw&%JR_bj)_@vKTBE?U`FFNuIqjEEc_9Z~hfM{R z;W6{3y6X7`#_IC;!ijK1FS+C;6@HdY;Z0js98H!+#^tn2{r=R=&m|b|$~SjY@WNuc zNxa5X%p5CGL{xY2$mf8R+{$k{Ug>?k&&39!F3jkH-&4)&wlnLG;GKZnQVrUVBa2YG zhle=oS^Bc01sb`VC9e*Aq^N}HBYqMG#$M!(-6wq zpoBM~SfHYWtN7VhH|6i|In^`&{NXezml6{5ay+^^Ujk2Vy!gjPg^Osobweo$n!lFh z|ArJm$V{TEod_Zf6#u3i3LUR^VIRLfW8ai^Q&NU|k$%4V`_vg8_MX1%YjHGgVQY1+u0x}FA|xV(})k8;$b>%3BAaxUVFh3kGPAoF2y7uh#}&kRcFux$E9{xt9R@CXEcXe1{BJ9j0unO zM2>75gc?%J_>>ppM+@g$s`qwk6Xg&IZ(hjFBy8A2h>S!TI`DXamJriOebjR>|e|CZI z$%(E$?Er_Pb?-44Q=7JI&_RXyD>xYH#T$ZFgr!P zyENG^dz-3r(+bbc!^uz#`aH&uz&o{fPn;i6rG!baW6lU3H`auH)KYu1Lm9!<_kd{q zQ@Tn6c{#ceQMg`XnNYMMuE-W8%eABhuC4aAa|KGQNDP z=<0wmTg041=jNHWReWkGj()++1J3oA=V4e+&H1uvG~qrc+tbv$JJc~f!w#u+P$ftQ zqhliEtY_p{MUe#y*QTf5owO)YJ#W9u)iPSswKK~nTvGh?j^7ii;+_OKig}+%P++O= z(XjHDE{!CMysuhN{I&G%m8oI9jCbFk(xPn6)0wh5QoAoTpL$9`$zr6UD!=EWN;xwT zu2DSjPLAoJP=Dt%WET|K4GKf5BIJDP<}@+s7>D)uf7QkM>K;{3wUc;`pN&b%wR34HhTY_n?6BlHskrs`ze01X zkL^axx8^0u%ah&?o2N@exvw|1r*5b%$lAZg1UhhR;}Io{b}P7itl?n!du&= zd=m|!b8oB%8t2b@_Wb!3^AczhjX1OBvok)YB}RuZ#E z_iAg)FTB`as_rnVHA$G!5=$Y$(x*mPjsB=47Uy71-(q@i*V9yA9JL%17C>6~sX=u# zEFib;?;VTDn2eshKu{1kk1lbX^sh7a?t8VTmnF3HgE|)Rt$*tqx(fO5cP)1nv^zYR zQy6-m7&;!`@_&}33a@S6E9IPoi{3K<<)m7tK%}YS#igdF<7Gd;A!)h|8$*D<`xl!< zD?H?;aDX6TwkGUee$B)gUVO{FaPwR6JQa1Nb4N;#-q(6QEJkT%unM|X+fovh z@FPKO(Bo~9s~(fC_(vXp&!dMd-d`Zl0dnn(dqKfQhuJ%mJG`L#iCDQ>WWr8 zLzl$-$<`!9THdRge-!A>C#6r;*+5j8<@Bw0(DQEMGd|dlI6BS}KfF5p;LV1(J?y%X z4mm~ru~442hsNPs`rlX1RdT1kua#Y{zi}nnFHp{`Gt9ycoo(>sj>UK(eYc|iVh0&( zWm?#1w86=zFCGA%H4FA$6nF5mR5fsal1$dvjeD{0e9HT6b4k>uBlw-3DaS~%^;tJN zuAciAuU@l_c9N&vYN&ftrEF>@_}Iv59x+2OQ_sr&ERwsix?IC$;5Joofza~Lt(gi_ zeJfK9eAVjnWsXX=hL?*wY>n~HGq8)MZcI>YW!vuF&*f`j8z2B7#|dYLdqW944egm zjp-Qe%~%dR%sQglSL&O>>pB$(%|5PdrV6w5F6mK%jr^56B(=9h9sN*zb|{2$-TnTf zcZvf1i!U;_G1ISC$n#}=P&#kFdWIyDshS#o{VsN^?FEt6wb#tY-}*d!4XbJHeKJ&I zR3ZnO4z-db&buqgi7mU*Ue1^8qVqmkrbN$PHy(c*dp&#k^4-#`eF3B>M(+Ie;V<7^ zeY*kaxXn_l2PP^Vp{2CM{1&dO6oc=iNk2B+x#~!a#N4U(sQHri;=f+bg1Ort zPUyL@x8ahWTpznqu0pUP106LWyYrWC4mPRq0*o{Z&rc+!l$IKP!5;OfBt40`i z8VL)UD42hiPVLm6ct}OmKBnsVp>k=WrPIT{Myi!>Dspd8=lS2FqwOS$_o!tl>1LBI7sbCRYj!g>4dy>=dV{uw9pRu zE+7w7R#$ZyEsszmywuUDn4h)aGvHzr$7E46P#Er%g@ZNxwGfDk~n$( z0ahAI|C;R^pAuw*4RUxB0uS_E+#}R3)_w^o$_p^rwg3>(~b7xeu z={GxaB)XcBD``e4Q8kHUWWFFZwdG~`Y5%8z#%GzB3&M3<6Mhz_gQQt|9a-$bI*C7_dRz#m*MC~>DGugeGJRQayVb%gM`Bb)24xTUv-bI zF2}4-=Sj+0oGmYS{h(RXps2F%slWwTbRd#0jut^soVII%F;%yoKDQH9vF$_7iK;KN9@eU$}aO6;b+!*h0ZNK znQdu|7l5zYISlhf4Vio4{dY+g7a7j)+iGQX-&r@Hhuge19b}O!Q&nIi!!dDp&;a|7 z69ntM!^7ZfXLmX5XHy$wxR7NW=Sf5MI6`vzJ8vyXaPM{=CL!L|Hf%*bqRDT&ZDEDhq- zn{)EmU^yETgWw4yb28&$Pvz(*>fNUY<_Qy6pW`P(l1uQl42FQ2?_hdoWEQsMd-_}b zo|fWi;-HWb-EOT1Dxj$m7K}J~>RbMQ>;5??FyB+`&Wii$(N!|h_8L(W#1m_mO-;QI zZzano0<>DHvj#llPK>P66iJxmeVrZ*GP^Fnw!GqJon?O4?Fffnrt815X zzpNlBjUM*H(;olGJu|RXeM|{1PTo8IL=08WIkt)~#7`WB1mP$n&HIhz88NDw{sygQ z%d;yH`NQW;>{TNN=6p00%Gp`Y@>{lzR?jWbj$J6j;}@&&i(Ikcm$Y&o{h=}IPaGtc z0h7mD6V>q9LUu`{=n`ZO<%MkLCwuoW9v+`9Y%63I7R^L5=DXMrmK*a$E)|kt5gfB+ zqWZv0XJ~myo%c19s3x7{=ma3Aji~CL9>?~!lBEqXn2i@VyMtL2DOrT&^kukc0R25V z2mA@iYHID4{><11fHx2BY$4G{GHm5?VKNP1+j)br&}X|mpQ}{}?bK`Y3Yo(L^s(bN z2CFkOw{3-w#Pw{m$qT2(YhQ^g;rGGZylEA$C+O7{uOIf>Suk`la*d^V| zbo+lg9pinzlRS^YyPsNucj!@j%*(p zzKSWo3LYmHt_at&-u#;TS$G7$Cj6|P`oL~yJDw%WCw1CGTjGxKP1THg zQvc{%UBkPU$M=5~dkNbK^92*#H@V9bMHRO`psl6Q*a)kVVKm&$jj0*YP`>nd@c)rKNT~WvbV4W9ybSk zJPiAaiZ|r{T!EhrGutOZd9IuHJI;R40#mzLyW}^CPO1i)P3yYwQfZFjh(h~k36}ub zOR&l7*whr<4Hf>z&)Gyu4i>Hl_j`WF~Yx z6jFOw*-ys1&!p_XEEHHWKeNYd4l0fo39 zg;h-fq%Q+DuVs-=_@@GkD9)x$390v2JUkFi*g-Yx;$2@TAaNNBG3c zz{cg|wF_y9PbDN_lOp)z?P}~ss;BSf_l`o?M=;~}tY|%Z28-wC&)&JUBsm2&=)Fg{ z^+6c^)9l%gb>0bvETgKQJDGXK^BgNDC2=eliVU77e1WI=`j_2B<|t?+XFRfszauRl zSvy*A--ZPH0RCwY%yQl7I0IY1l8eCzYFs?wOFKiy>Txj*9=%YQ2scLlc*-smai+{?FJ<$q^r0rTguS<9ol-NBwBF<3frV<&>YJufseBQOa z1pi~{^QAuY&hg&u5%imYhqCuaui&hAC~ZTr#fN2!@64dB0kbFDx06rUU6hJmGcW-ZYv1Fe1bj9J|9CqbOdSjzoUu8>*!zLL`~vguhnhw!nC;EB5dSw# z=>jv)u&WchL67E7Q(e#VSU9<>xr+)tKz>GJO&pmXLG~tW6mHBetv?}5HBg} z*Np*1w#6C{s?#byN^Ugy0!xol5{<_0bowS!Z2-NH^dUH?E&|KVT#lURDsN?95O z1;L)rt&14p&U5>{_v0CiyzMQLBR|FYOg(*Jc|2V%G+sydekFO;_(XcFFqxmIAaA?p zw`So+yy?lqnYVrI!+Vkv0Xtn>JuCCyw*p+Bj)KQbSMEH3^-siHhV{I*xA)*~-QFAA zNqaq$AayVwlW-Z{wCS}|X)AwXlj&?!Xri6DIiEPt@OCpN)#6=7PfuT>G+y7`o0~gi zp#s{hZJ~d-E>bNu4zi-<%QX0OLniZ^$SCeB>d|yp^S?jP3HAP#I@tOAvS7=WlX|GE z`mbZ@`O#s{%=z(RQkF#91AE)(=f=nxb(pO}fF5l@ZP867`*W{@MjP7)Ot74hsEH&4 z)U4vSe#)@y_da*%7FV;TgY|q*B$QnA2B$@DUGMwc;vlGHL7OJU(QEYJfUsZ|P|CRb zq4>kHr>@S|{&JzcF}%?`XHnNJ*DPe*)7-DQ(L56mpKnOp3R8R#KB}KzQCJ)QsYOc3 zqH_Z0puxT=b9xKJnZMMR6t^GzF1g-BW2W8uiSma3Y8UT>FVFSor0L-u7Z`z(s!i6% zZ*I1*(qPIwkMB%pUmCE%D8;(X!Zr=q>y*WXlRnH)wtVUu__%b!%WIzX>blTZ-k~bv z!*8Cyx0(9YVdiJW)iVFk6j+>b27d|)Qi zGJC$Dp}&rsxKRT_oi#a^*Xxig>T$fmT zE&Ju$qYBEfOq3@)B7y9d`pJHrTjo+!gt^Q!xpXi|HFNUU=hVchM@#(}hmrZt)EL0F z&bLH2+VZ6i{3{ojCaNFrd_(6erG!uhmpFr6mBRMW$bD+jiq?-KjW_F8IzMezxQh%voHTw;%9%IuP6<`S)vKB;9sJk85?CtStb%zD3F{qQrNKpD{KIjgZ9&4>q+Wd$m@G*hNZ6sN8jAtJQj zlfRKq6X##Qox1;czjwiI0#Y*OM|Zc~$L+}TSTPqi0b*S7s!f1m(+fmcV32W>u~GJN zQ(vEei1#l`rI{7oZ_^&Qe+yx)yXBa^fGbQ;lOykowOom~1*YAhb@nD?laRz=Tu9om+> zVses@8PAE{h^#!g9m&TZ(N+-F5#UxL_vfeCqX2Fk*($Ub`AZ1gi&Q!++AOad6aIhq zBKNHVP7Xd$72gJKGO~E^U~e<)RO_4GnHoq!uKCRg9_Dg&PletTNik6WU`JkT{Nv67 z^+KS%VuA&WpHLJn>~30^C2jv}*S(?AuZ5*~kZCo&xjS=mB-P9Bvs@lJ~lG ztiy>NpvOtgm!e?S7Xf%3$zNFX-^KQ>=dn_IogDcSuZ9kN5&OISc|9PY1COcZ>jSr^ z`9F(*8;--5*AFPb&3VUZY_U4D3f!nW0yTCQrH!qVcoRu$v~-YvjJMmMcOQ zZj#!j#X$(MpPfD=A&h5x7fIZjyT}R>oT3G_{Mr4ts#0nWPa0-*BsPrl;&$r}JgI=b zF=z1ns%JdU`bFlNAZlG(TJKl?kQ3l~6oPsj7UzvgR?lBFBT81ju|LBTDN{lFTPM{h zVfrQhq(+O{x13i~<%q_e?Z<$()C4+ribh+# zy)TO3(FvMGhI;$Cjc*n2HFopx+fUWGgv*Y<6wSQ~jlm9UrA8Z3EgX=a8nOx050nDpS^or6iEIQ!Nr#tUy}WQ6(jWRa@=+h9}4ao^iKq2BnPoyv#5ZU8Lj%-TLJ*|mKX=?N7< zrM7d@T)m$;nLb{@k*BD*S9fhn+RL zjOW7i93yc8W9q})tuy4VbDfbCdliaZMQfWnI;F49YHr=YJPEnM)c3o&i#qjn}g^#uP8M%59eRX1=Jettt322-bl?! z7T=srUDmTj_vinY-y43Mk^?4~D&bSs{*phQH)+x(;dY4ZdXmeEX-isil3LWwLYE9jv#d%1_t%Ejhg2|` z)3I`mMQf&687DIrW{*W)k0EgG(#w7?wH78nskRRPdVYc7^_8T47KIMdn_Gv`N_Zt< zGKV^}=wNGvT;_f@r2sp%l@e;H={0-TJMiiN87n4aZBHl=T;S@jWIi?#QWqO^1Smpz=Nc3o~`%aZLzhVD8Av}hv zx%BpWNfZw(G;(8L{y?)i^NR@@B`4FxL9XqSl8}GqULzywm1B5jcdq8+}!Xq_Lj(-Xpw(zu=A8#+deqHl5>oXEUC{8vIGd%AC~ z5ieV)^1wmvTMG(6m|w#=P~YNG1Me3F+W$I!S<&IB8tp=JzfzmQE>p0L+sehBn8lUY0>1KnW<+@s-K%JLl}D!Wb$mr#XaNREH?N$c!iBb!l>#Dm^wm% zlnqCK76f)t7u7*husn_gDKKUAXiy4A8jV}%zwZwq=`h&o_o$n=i;#Gtg#1(S2o_aH zJdTMBz-+q>G|Po5J+I!WH*#(U6XIYOi^1DI^a@*f^pUoEzbuJxX&NAGR6j`Jl+-Zr zs_H1yiXaF=-_;>LFtZLofVWazA#*!B20I~hlY?LWhTOx!3L_20f)`9(YCY)zFnyE7 zj*b+1%6ppH4GZdtn&)vcf{9+lYbUE8&QE`?lYP$G7zpV#PbPy_1ud7AHkBg>EqAB9 z5>5nJ9)^@bfq;wZQAr+Qs-T}F5Y$x!s0t9v0&wuknOOH}V@&tyh@r;fX*8%|t_pkV z3H~S7v(%Yu*}==F)FXNTn38La)uV&_ZFdp<7_#6UTBoRx74m>A36mhAA3|C!uQF)EJW#S@@ri}@YGL^f0a9KJB-hTR74d`DKc#Drvc!AFORBdwMa2TX^ z5^_i%R69!lmI%9(I^-IiZ>nOD%c6u}%r8KUO3pg8KJ=u8P@*%YBZ3sKpeiZ`QR0Zj z@vu5d6DkG%t90hH(j&6vc^cpl2_Zzzf7+Be*^n{Rl%reN4;RQAtU=+NgwA3F2X7#N z?xR9ikwG<({NbQi0ay)k=nhyTO$EEc4Y~DV8Xp{T>lQa!9|DC^xhw`Gx9)RnIuhbR zcMMjW;2gv+;Zz{xC|gBT4*{XLppDA{X@+GXI&SUHT1=-|7a=wgeoZ`8_()JVyB zLUK|PLniB!afe}DT{AbP6!p7Oo?HR1?535!0F4xR&hh&eWTfZ|YzNf$t|G=yMZ!Z> z2qJI7r63e%sGi83isU#I*+=$6qGpLM|G=AcU?(Z#3wy1D?^!4b=?AQ4fS^>+^HT{< zrxNb}0+yjz(sspLh62J{@DlnQWW~FeI6{+x!O!a<$Km+l;CVNAtMnK069b5r&3PFX z5(q6rnxbe3t+tRTexSAFW)OP3)h`NPLcu}_brx6~*$@<+qHI)(ZbN9=bh|M@Xc}wd z)F3nkF9Z`b6ATJbAv9!&_ylqNeh&xOkO7qV@<>+7`R);Ud%S*yBLJ`+Kz}2^?ItwB>Y}@lPO2G2 znvhPaMQ%t)r=gcvZ3yoR%pq?f*1r7qeHCf|?Fj!F4hoWxq6F7PgDziRbQ=An27gzs zKmA=AE=2|EZ0AG=u0g?YKtf(cpja~55ELoWiUW-=L9AxtTP9Gfj2E2`YK*cbD!vAV z05OdrFijsoEbHJ%pcr}fWdlFd*Fre%89|n~(ZQAoid_gdfD}8c{Jj8DY?2Pn0Cijm z2|57;7%(otpIQ(IaswgA04ZcA2;N19;uG>TK20Nyd7=2!Z47R)T*TWWDLn~X%%(0P zbl7{r1chSnxfL-(h{z;hB_S_SFu$aS_(KsKJVx+RE0vrey*hba>E& z&Ql*^T?YB09*34DSRfB`ge*8O#Uc)cw(}&!RfN#iM`p|i^}@9EI3b9L9DGB>5ESOB zxF--1NzVRo0->-ZQT`@OFqr|)5C)oj1~%Ki_k*-!@Im^jLW1OFcCt7JxTViCPlsL+5%R!Ko;g z3G{N|LPG>c2Zh|v0xjxt_L3|hg)}Us5;X!Vh$=gQyPF`E6?#P?5N2OPvBVH&VKmtP zGo8@u!h`v-3u;Z7U?D8l5DuQyX#hN$z)h$<`x>(%B|`O=*b1mR*>L1}$k*j#4PV(H z2)i|Ka1arkjMx<|h&1bJ-w5oRG=w}see?#Da*9dZ)KV>l1QjwUVOCKY5- zfGb*;;0#Gv3=}-4F9AFdJ(rU`>3iVL<0d1?A-lO4prrbGBCkrT<{1VJxp^u@J9 zk}CFfn!Z5pLzN-gq2c&L7(v-OCs#@qQV31qOXzf{Pg=myMG$J4(jvlVAk-dR{69a4 z#L6L>2}38?1Q(%+kO&CQiv6a>(D&mKY)eib@gGS2LiF)-=k)NB@te+z?GQ z^TcigPKC)Tehi;JyvQ6V^>0zQ&i(ac$8Rgh6@-E869mX5Lp6xDTh(H>7zj=ni_mIQ8#2Boj2-(6GM- z-q*Ko!+Zj8uphy4OtDDF1;b=<9MG@iFZ3WDtvIu*L#6;oQP?!(~rvF4hny z09Xft0*V>jstriU_j5dvM5n61`BwL-TBx?@SjE&k{n-|wP!|AZ246d=_oslG;)qiC zCsVJ-42r1!G0lX@VASrZ&<3+OYAAkG*ZIQ;aJX}zBOo}~E`V=FfHR#^KROsBY5yh; z1>sqJ?++my%*!zh5<;ddwdgGpViWZd_O*s4-oqE z0TrPF>bfs9ZQZiph{$>+TiBKp3@4C^>O zc-{U+CRh9DgLbH@xs#KM5HtL@k)5<)@OEseC>hoicH$I zG4?LhG|iuwr`FFv&7#n75(G@h5?G)I8y5MdcvHq4Do)0m=1M5eMkv0j|CA^MDsD_D zZt<^pv7)++DM7kGnk7|t?|;&FGoErihl-2BWl3Q|U~y_l`aMNinOlV7LTQf)#ZRRl zZa&Q*6gP$+5JSbUGXpFaPDW~$g&kVfsHVp84F`f#b{7E{k~cmG>l>XLD+Xfz!nnVJc=z!Wn%#o7l6P9x^6L~-7h%DFu?I0 z6Sn{Bo1O|(+z!SX3>8m53l;BXzsMpF6-O|1^Ad_DK*h<9D!#oZ6u(a>E(j)>C8OpRc9fRbX0yjKHFu>9a;zO3YJ4TrTLCl+ zhGgQUvY_gIM2wPvJR7mpWOtsRlmv2t3Q=kfqp}C6rj*XI(uzR*0ASX{?nt<40T3zy zHCya|J|BVs9P|PgK$HalPBN(3FZ#c?3C*H&zzIG|iynxE$SGdRobiwVNvJW$21i;Z zIaUM0LUmNU_~NNLm#A#0y1_fg+yr$NE9}6G84#m%n$RmqyIeTOYY2Wl4_zk;0*^z; zud^Xa@4(U|A$8u@FuWwFgOY&jk-&uXf$KC7(-Km`oFTfPIHcgwAf^8ME@i>!7YLaZ zh$K!2&B_A0FF@tLcZPNl(B$xh>w*12AFzYaWUM-Qp`c7~hr~ZQc96M@+UgBu1aqmx z1NlH0_<&N#+!rQ;jjv95;-6Q0pPy!&W?frKmSTb40RCzc1&Cfb}4YV$qXv4 zix&=KAQ*~62O@*9H!Q)GC8*#7H(u4vQ-7pk%Q(=zjDRUbgY!coJrbw5^HM2OiT*i* zb%XqIeo&<6%ISB(|MPwHY7f*KK-vhV2_fUQh*2_-niOE@VmnonK9mC)*H4W4O7P!G ztQ{-iyVWJC04mYkfASkYT3acd>Jx`;;y~YK1f~!WKRyYh-#g_;=D+WLg#tctOo_@3 z(zL}iomY$RIUaBwF}96|`4b$0Erw5#!eVLw?{Frqi@!0t4WspE0FcNlA^)|^mnMdc zEB&Xb)sR@Rz-bH7C~sxl2O;1)!G#&Mq2T-%)D`7~kU+p<%78dNkW!XT2b?>nt`Vc_ zrb65thNIIV3W_a94bc;zXt*_*$AP}5`aX3jQJ=W9!%&OFcspab8sFDn5aCU;c%&6 zsWB4lXbNXfI~w@FBM&9vS3`)GeOsC=$Wwv{QK^B1A_pA=5o&CtTaoZRP78g+fxf~3 zaKW+R+F8&z7wit!wC zXWzbYrKVz0nSAJWI<6s$APS7_)Nvqb?-1kcV7TB*HpcrR$_M;is045=ZuMm?<)#<=> zoir6Cf=f(L6%Mo}OsB$G+ufqxzIDMR`?c0U|6D@=e8H@T3Fwx=Q$085!Y9$%< zWsQE+=u%9FPX;=76*_4rZY6h1KPldH_xhNZR)h|hljEvieI$E7TmM}$c)!}ViUE3k?IUE37m&n)3NJI*ihN*MxH#f(>(b9_}q$+||TM7nz zHxkIPq-_2!%4R=joE2V`S`}xsM{JeG4>DTL@7%AN?Z4wubZ)n&XC>pHEYJOGapId! z%167Nw{K~_m({)aC42tq2*q8}(~hUX5qR=V$-=f&enjnYuk)Mveu*cyA7G`;7Y%Ah zy)L<}mFQLsV>YVa1!)pHw>ncWaxKHrePxWRUth z_Z&Wh^xNexlcdysKiMGF`Ph>eWpr_ac=r)l4FD{8}ZQff7lYXUrk zKLp&qXz|Sn_4V(?e_CZR?m0|~q;mJY7G%!UI973MnC8u{O<0|LkFR0bQ~E+h6-(k& zmORx-^3(uu8anAyPx!pScENel@{N5)35$;#XublKsdj@s}6rx7sp!WFH-H zdiWjYG%Ca|^5~u`zgkUs+KbV*VFdxx?22nkk^v;7NF`MlVU zwe;-G{Ud$7PrmGQa)NBo!^Xt%)+s1GduQ9W_>f65AZ5vrvc_=UPb4ksT9Q$ZT35lk z&Xds|xvdT*p^jPeQipw-Dme>_lkvzAC-~%U}RFS0)zXcetqc%se-HGyf3#*#Dj^Z!dDJ z{aI*WXihWqu(l3qm*<)u`6@{-IB@>)3pX#U;mzvP;rTa5H~U`IWAv~R+jRCoqcMcVPCaxNPB`NxQk2g8YK_ zA3vX66bj-EXK0vu*&s}qZvb#pgp5$f>pz`AbRHSrFH=cJ;8pnUAuo*@)wR1_ucjV| zrUO(jj?7!*502fvd>4DS^WI%)ilZJBuj`Mpu5CW9WgIX=s8`T|QjK?K3N2{`j-F+mG?oYG)ig|B zw1qV|p&nZhttgqQB;9a#n)~g|LjG@TrHVsM4(DRTBT^p}kO<(H(lL<-iEw6Kywd`i zxjx|JeUy2a`1vt=N6MSG#cs~~oN5hajB**Z10ubOTpNIr+`RrE64?Pq`(rgEi&;+x zI|1Cl`bP0D%GYsm#G&{-pAJD>Q5C%4GO+q&L&`yR$?D)cMdW;! z_rL_D%vuX|W$&+G(X{j9bSy*!V=2JN2~LC@5Py|gS3BvKn`LItc7cQ?3HEh~J>bN> zO75_XSj#m|$=*=!)%h%uYbEd7fY{EvX~6@Ge?E!_cj{D7T7VDP5k@8&n2rGWSB|8l zpS8;buq`21{maMeQt52Kw-9|&QOw|e!0t)xSeex`0p8}?itd7wlGO8TzZnr;KlgK& zG|#LYS6^_1$4zN}6C=#saFXJ{?zxCWTNWjeZGPSWlO;dDg#>_$9J>KNwpCiy=Ui<5 z6`ig~XUgN{OR4wObi@M!*~$T?YJ_MJ3HE%pXwcoljdlF; zal^oT-o$3`b2f>dkw}%(SzjJ`^;k)AXvxXLSC1VNUiyIkp}Y%6e~Olx$VwM3A|&u8z26lT;6J+He?gp9{^yqWYuHU&qC=Hq(=5*uX-BZ zZ(4smN;Ns@j4glX-!U6MBQfnvQPUwb-g=H-Nd<;Ze|4$=+9NO!J{ir~T%&K%D-Tj_ zdYmKxlUQXIyGqH__ zUTwPpX4IuOvW~>kZUNm4cdFS>mX4S5$0z=4j5Dy@6d%vz6%vGdo&zCroP!r;binfY;%!r9zyEkG$S%wfcI8Sm!lpNY(GK>={qCd;M?^3U5K|l826)% zn`O3E*mv>G(-t_z)1|Z^h<2TJ(!8s1X`#@=5yOOgM=TpFn6(qU*cmKonL^#h?auzc zRpvT}8*)G2+>m0fs>12KD6u+h!y2q84-ZW8USgU_T^Zla9b8&b*%SFB9LjjQxRytZ zI}32C{`#$R@0IiCO#LR|SldN9Q{ugD_X}zZ(Dc;y%c&LtAxQ&u;>iU+8>8$>M@a)bSZJOehTBN{w z>)BZVVbuA?gYc zo_0-=dUyWCdLQ!)t4Qi*P47Unf4x5bUKjB6?%w}zk`^|9z4D>|UCsVjM8g}5s(xz1 z4r63NNSlH|Dw`r565(U(b(me}w`!)lxapEcPY6s{6b13PLv13H8MhX{2&v1_ULt*@p77= z`cHFYXkcB5B+7tQ*+V)hR66;f&|}uiTk@NvCXQdYc+IyVx4SkOpF~e9%UPfGg&J|lKAq>-)HPdwn$1@ zx?yu0!*}bGzo0F#=9m=Cplp(qlrdfCw{hl~#V^N;1!#QDv41sYaz4p7A;Hf+p8Z~u_z3ciH z$$xJ1HSb97vdRqRmqsCvehqa_l^?2F06D6-j4mO&wuI{Z=4eB~ljQif(RbzlR?>I{ zxcKH!A!FZ?2KNsP^?S_C{OV&}Nj7Tq{B2mbydxmOxx!w+`ETk^c9CP1vgpQAm~phs zI6V8!Lo*jmAH9$68OD;g+O8t5?mJcnV-D6d(@MVOx$n5PIbP1W6Y*|m5IlgD8MM5lFfll`5T&4i~6ju`1DieLr3-Q9JqGyirQV%PI6wHR@ZrvYRN(clEkFExe-zPGlFvKL57y;t>ZIw~tm^ih^Z`y~cy znl4fqpF^45oy+|rGy1|w3lu4`J=E0_-s2IHG}iP}0ZZ(Q^gEZZJyDIWqFS4Ym*mlExa5qjh;M1Y>V8oRdw#K*qArV19z+N9P$rWv@6H8^K6 zVyVw8K{eA?*<)A8xJ0sNGtW|3FQ$9^Q=}#L{dxHM+0@H{Z0laxU0&bm7Zjel9{T2F zoF!0M!y8uYf{mk&IuJQW6_XS!j`+>2XjHv80j{Y_%$Zxtk9#806JQ$N?n#6Z5sAX3 m!}$QggQn@y(?C58$Df1yx<9?1{L2Xd|J_j4xn6J$9rQoV6YP)x literal 0 HcmV?d00001 diff --git a/test/fixtures/plugin.filler/fill-line-boundary-end-span.json b/test/fixtures/plugin.filler/line/boundary/end-span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-end-span.json rename to test/fixtures/plugin.filler/line/boundary/end-span.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-end-span.png b/test/fixtures/plugin.filler/line/boundary/end-span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-end-span.png rename to test/fixtures/plugin.filler/line/boundary/end-span.png diff --git a/test/fixtures/plugin.filler/fill-line-boundary-end.json b/test/fixtures/plugin.filler/line/boundary/end.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-end.json rename to test/fixtures/plugin.filler/line/boundary/end.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-end.png b/test/fixtures/plugin.filler/line/boundary/end.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-end.png rename to test/fixtures/plugin.filler/line/boundary/end.png diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-span-dual.json b/test/fixtures/plugin.filler/line/boundary/origin-span-dual.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-span-dual.json rename to test/fixtures/plugin.filler/line/boundary/origin-span-dual.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-span-dual.png b/test/fixtures/plugin.filler/line/boundary/origin-span-dual.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-span-dual.png rename to test/fixtures/plugin.filler/line/boundary/origin-span-dual.png diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-span.json b/test/fixtures/plugin.filler/line/boundary/origin-span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-span.json rename to test/fixtures/plugin.filler/line/boundary/origin-span.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-span.png b/test/fixtures/plugin.filler/line/boundary/origin-span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-span.png rename to test/fixtures/plugin.filler/line/boundary/origin-span.png diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-spline-above.json b/test/fixtures/plugin.filler/line/boundary/origin-spline-above.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-spline-above.json rename to test/fixtures/plugin.filler/line/boundary/origin-spline-above.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-spline-above.png b/test/fixtures/plugin.filler/line/boundary/origin-spline-above.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-spline-above.png rename to test/fixtures/plugin.filler/line/boundary/origin-spline-above.png diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-spline-span.json b/test/fixtures/plugin.filler/line/boundary/origin-spline-span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-spline-span.json rename to test/fixtures/plugin.filler/line/boundary/origin-spline-span.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-spline-span.png b/test/fixtures/plugin.filler/line/boundary/origin-spline-span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-spline-span.png rename to test/fixtures/plugin.filler/line/boundary/origin-spline-span.png diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-spline.json b/test/fixtures/plugin.filler/line/boundary/origin-spline.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-spline.json rename to test/fixtures/plugin.filler/line/boundary/origin-spline.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-spline.png b/test/fixtures/plugin.filler/line/boundary/origin-spline.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-spline.png rename to test/fixtures/plugin.filler/line/boundary/origin-spline.png diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-stepped-span.json b/test/fixtures/plugin.filler/line/boundary/origin-stepped-span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-stepped-span.json rename to test/fixtures/plugin.filler/line/boundary/origin-stepped-span.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-stepped-span.png b/test/fixtures/plugin.filler/line/boundary/origin-stepped-span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-stepped-span.png rename to test/fixtures/plugin.filler/line/boundary/origin-stepped-span.png diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-stepped.json b/test/fixtures/plugin.filler/line/boundary/origin-stepped.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-stepped.json rename to test/fixtures/plugin.filler/line/boundary/origin-stepped.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-stepped.png b/test/fixtures/plugin.filler/line/boundary/origin-stepped.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin-stepped.png rename to test/fixtures/plugin.filler/line/boundary/origin-stepped.png diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin.json b/test/fixtures/plugin.filler/line/boundary/origin.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin.json rename to test/fixtures/plugin.filler/line/boundary/origin.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin.png b/test/fixtures/plugin.filler/line/boundary/origin.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-origin.png rename to test/fixtures/plugin.filler/line/boundary/origin.png diff --git a/test/fixtures/plugin.filler/fill-line-boundary-start-span.json b/test/fixtures/plugin.filler/line/boundary/start-span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-start-span.json rename to test/fixtures/plugin.filler/line/boundary/start-span.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-start-span.png b/test/fixtures/plugin.filler/line/boundary/start-span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-start-span.png rename to test/fixtures/plugin.filler/line/boundary/start-span.png diff --git a/test/fixtures/plugin.filler/fill-line-boundary-start.json b/test/fixtures/plugin.filler/line/boundary/start.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-start.json rename to test/fixtures/plugin.filler/line/boundary/start.json diff --git a/test/fixtures/plugin.filler/fill-line-boundary-start.png b/test/fixtures/plugin.filler/line/boundary/start.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-boundary-start.png rename to test/fixtures/plugin.filler/line/boundary/start.png diff --git a/test/fixtures/plugin.filler/fill-line-dataset-border.json b/test/fixtures/plugin.filler/line/dataset/border.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-border.json rename to test/fixtures/plugin.filler/line/dataset/border.json diff --git a/test/fixtures/plugin.filler/fill-line-dataset-border.png b/test/fixtures/plugin.filler/line/dataset/border.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-border.png rename to test/fixtures/plugin.filler/line/dataset/border.png diff --git a/test/fixtures/plugin.filler/fill-line-dataset-dual.json b/test/fixtures/plugin.filler/line/dataset/dual.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-dual.json rename to test/fixtures/plugin.filler/line/dataset/dual.json diff --git a/test/fixtures/plugin.filler/fill-line-dataset-dual.png b/test/fixtures/plugin.filler/line/dataset/dual.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-dual.png rename to test/fixtures/plugin.filler/line/dataset/dual.png diff --git a/test/fixtures/plugin.filler/fill-line-dataset-interpolated.js b/test/fixtures/plugin.filler/line/dataset/interpolated.js similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-interpolated.js rename to test/fixtures/plugin.filler/line/dataset/interpolated.js diff --git a/test/fixtures/plugin.filler/fill-line-dataset-interpolated.png b/test/fixtures/plugin.filler/line/dataset/interpolated.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-interpolated.png rename to test/fixtures/plugin.filler/line/dataset/interpolated.png diff --git a/test/fixtures/plugin.filler/fill-line-dataset.json b/test/fixtures/plugin.filler/line/dataset/no-border.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset.json rename to test/fixtures/plugin.filler/line/dataset/no-border.json diff --git a/test/fixtures/plugin.filler/fill-line-dataset.png b/test/fixtures/plugin.filler/line/dataset/no-border.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset.png rename to test/fixtures/plugin.filler/line/dataset/no-border.png diff --git a/test/fixtures/plugin.filler/fill-line-dataset-span-dual.json b/test/fixtures/plugin.filler/line/dataset/span-dual.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-span-dual.json rename to test/fixtures/plugin.filler/line/dataset/span-dual.json diff --git a/test/fixtures/plugin.filler/fill-line-dataset-span-dual.png b/test/fixtures/plugin.filler/line/dataset/span-dual.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-span-dual.png rename to test/fixtures/plugin.filler/line/dataset/span-dual.png diff --git a/test/fixtures/plugin.filler/fill-line-dataset-span.json b/test/fixtures/plugin.filler/line/dataset/span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-span.json rename to test/fixtures/plugin.filler/line/dataset/span.json diff --git a/test/fixtures/plugin.filler/fill-line-dataset-span.png b/test/fixtures/plugin.filler/line/dataset/span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-span.png rename to test/fixtures/plugin.filler/line/dataset/span.png diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span-above.json b/test/fixtures/plugin.filler/line/dataset/spline-span-above.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-spline-span-above.json rename to test/fixtures/plugin.filler/line/dataset/spline-span-above.json diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span-above.png b/test/fixtures/plugin.filler/line/dataset/spline-span-above.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-spline-span-above.png rename to test/fixtures/plugin.filler/line/dataset/spline-span-above.png diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.json b/test/fixtures/plugin.filler/line/dataset/spline-span-below.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.json rename to test/fixtures/plugin.filler/line/dataset/spline-span-below.json diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.png b/test/fixtures/plugin.filler/line/dataset/spline-span-below.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.png rename to test/fixtures/plugin.filler/line/dataset/spline-span-below.png diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span.json b/test/fixtures/plugin.filler/line/dataset/spline-span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-spline-span.json rename to test/fixtures/plugin.filler/line/dataset/spline-span.json diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span.png b/test/fixtures/plugin.filler/line/dataset/spline-span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-spline-span.png rename to test/fixtures/plugin.filler/line/dataset/spline-span.png diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline.json b/test/fixtures/plugin.filler/line/dataset/spline.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-spline.json rename to test/fixtures/plugin.filler/line/dataset/spline.json diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline.png b/test/fixtures/plugin.filler/line/dataset/spline.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-spline.png rename to test/fixtures/plugin.filler/line/dataset/spline.png diff --git a/test/fixtures/plugin.filler/fill-line-dataset-stepped.json b/test/fixtures/plugin.filler/line/dataset/stepped.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-stepped.json rename to test/fixtures/plugin.filler/line/dataset/stepped.json diff --git a/test/fixtures/plugin.filler/fill-line-dataset-stepped.png b/test/fixtures/plugin.filler/line/dataset/stepped.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-dataset-stepped.png rename to test/fixtures/plugin.filler/line/dataset/stepped.png diff --git a/test/fixtures/plugin.filler/points-outside-canvas-initial.js b/test/fixtures/plugin.filler/line/points-outside-canvas-initial.js similarity index 100% rename from test/fixtures/plugin.filler/points-outside-canvas-initial.js rename to test/fixtures/plugin.filler/line/points-outside-canvas-initial.js diff --git a/test/fixtures/plugin.filler/points-outside-canvas-initial.png b/test/fixtures/plugin.filler/line/points-outside-canvas-initial.png similarity index 100% rename from test/fixtures/plugin.filler/points-outside-canvas-initial.png rename to test/fixtures/plugin.filler/line/points-outside-canvas-initial.png diff --git a/test/fixtures/plugin.filler/points-outside-canvas-update.js b/test/fixtures/plugin.filler/line/points-outside-canvas-update.js similarity index 100% rename from test/fixtures/plugin.filler/points-outside-canvas-update.js rename to test/fixtures/plugin.filler/line/points-outside-canvas-update.js diff --git a/test/fixtures/plugin.filler/points-outside-canvas-update.png b/test/fixtures/plugin.filler/line/points-outside-canvas-update.png similarity index 100% rename from test/fixtures/plugin.filler/points-outside-canvas-update.png rename to test/fixtures/plugin.filler/line/points-outside-canvas-update.png diff --git a/test/fixtures/plugin.filler/fill-line-stack.json b/test/fixtures/plugin.filler/line/stack.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-stack.json rename to test/fixtures/plugin.filler/line/stack.json diff --git a/test/fixtures/plugin.filler/fill-line-stack.png b/test/fixtures/plugin.filler/line/stack.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-stack.png rename to test/fixtures/plugin.filler/line/stack.png diff --git a/test/fixtures/plugin.filler/fill-line-value.json b/test/fixtures/plugin.filler/line/value.json similarity index 100% rename from test/fixtures/plugin.filler/fill-line-value.json rename to test/fixtures/plugin.filler/line/value.json diff --git a/test/fixtures/plugin.filler/fill-line-value.png b/test/fixtures/plugin.filler/line/value.png similarity index 100% rename from test/fixtures/plugin.filler/fill-line-value.png rename to test/fixtures/plugin.filler/line/value.png diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-end-circular.json b/test/fixtures/plugin.filler/radar/boundary/end-circular.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-end-circular.json rename to test/fixtures/plugin.filler/radar/boundary/end-circular.json diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-end-circular.png b/test/fixtures/plugin.filler/radar/boundary/end-circular.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-end-circular.png rename to test/fixtures/plugin.filler/radar/boundary/end-circular.png diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-end-span.json b/test/fixtures/plugin.filler/radar/boundary/end-span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-end-span.json rename to test/fixtures/plugin.filler/radar/boundary/end-span.json diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-end-span.png b/test/fixtures/plugin.filler/radar/boundary/end-span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-end-span.png rename to test/fixtures/plugin.filler/radar/boundary/end-span.png diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-end.json b/test/fixtures/plugin.filler/radar/boundary/end.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-end.json rename to test/fixtures/plugin.filler/radar/boundary/end.json diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-end.png b/test/fixtures/plugin.filler/radar/boundary/end.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-end.png rename to test/fixtures/plugin.filler/radar/boundary/end.png diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-origin-circular.json b/test/fixtures/plugin.filler/radar/boundary/origin-circular.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-origin-circular.json rename to test/fixtures/plugin.filler/radar/boundary/origin-circular.json diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-origin-circular.png b/test/fixtures/plugin.filler/radar/boundary/origin-circular.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-origin-circular.png rename to test/fixtures/plugin.filler/radar/boundary/origin-circular.png diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-origin-span.json b/test/fixtures/plugin.filler/radar/boundary/origin-span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-origin-span.json rename to test/fixtures/plugin.filler/radar/boundary/origin-span.json diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-origin-span.png b/test/fixtures/plugin.filler/radar/boundary/origin-span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-origin-span.png rename to test/fixtures/plugin.filler/radar/boundary/origin-span.png diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-origin-spline-span.json b/test/fixtures/plugin.filler/radar/boundary/origin-spline-span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-origin-spline-span.json rename to test/fixtures/plugin.filler/radar/boundary/origin-spline-span.json diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-origin-spline-span.png b/test/fixtures/plugin.filler/radar/boundary/origin-spline-span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-origin-spline-span.png rename to test/fixtures/plugin.filler/radar/boundary/origin-spline-span.png diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-origin-spline.json b/test/fixtures/plugin.filler/radar/boundary/origin-spline.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-origin-spline.json rename to test/fixtures/plugin.filler/radar/boundary/origin-spline.json diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-origin-spline.png b/test/fixtures/plugin.filler/radar/boundary/origin-spline.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-origin-spline.png rename to test/fixtures/plugin.filler/radar/boundary/origin-spline.png diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-origin.json b/test/fixtures/plugin.filler/radar/boundary/origin.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-origin.json rename to test/fixtures/plugin.filler/radar/boundary/origin.json diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-origin.png b/test/fixtures/plugin.filler/radar/boundary/origin.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-origin.png rename to test/fixtures/plugin.filler/radar/boundary/origin.png diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-start-circular.json b/test/fixtures/plugin.filler/radar/boundary/start-circular.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-start-circular.json rename to test/fixtures/plugin.filler/radar/boundary/start-circular.json diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-start-circular.png b/test/fixtures/plugin.filler/radar/boundary/start-circular.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-start-circular.png rename to test/fixtures/plugin.filler/radar/boundary/start-circular.png diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-start-span.json b/test/fixtures/plugin.filler/radar/boundary/start-span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-start-span.json rename to test/fixtures/plugin.filler/radar/boundary/start-span.json diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-start-span.png b/test/fixtures/plugin.filler/radar/boundary/start-span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-start-span.png rename to test/fixtures/plugin.filler/radar/boundary/start-span.png diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-start.json b/test/fixtures/plugin.filler/radar/boundary/start.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-start.json rename to test/fixtures/plugin.filler/radar/boundary/start.json diff --git a/test/fixtures/plugin.filler/fill-radar-boundary-start.png b/test/fixtures/plugin.filler/radar/boundary/start.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-boundary-start.png rename to test/fixtures/plugin.filler/radar/boundary/start.png diff --git a/test/fixtures/plugin.filler/fill-radar-dataset-border.json b/test/fixtures/plugin.filler/radar/dataset/border.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-dataset-border.json rename to test/fixtures/plugin.filler/radar/dataset/border.json diff --git a/test/fixtures/plugin.filler/fill-radar-dataset-border.png b/test/fixtures/plugin.filler/radar/dataset/border.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-dataset-border.png rename to test/fixtures/plugin.filler/radar/dataset/border.png diff --git a/test/fixtures/plugin.filler/fill-radar-dataset.json b/test/fixtures/plugin.filler/radar/dataset/default.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-dataset.json rename to test/fixtures/plugin.filler/radar/dataset/default.json diff --git a/test/fixtures/plugin.filler/fill-radar-dataset.png b/test/fixtures/plugin.filler/radar/dataset/default.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-dataset.png rename to test/fixtures/plugin.filler/radar/dataset/default.png diff --git a/test/fixtures/plugin.filler/fill-radar-dataset-order.js b/test/fixtures/plugin.filler/radar/dataset/order.js similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-dataset-order.js rename to test/fixtures/plugin.filler/radar/dataset/order.js diff --git a/test/fixtures/plugin.filler/fill-radar-dataset-order.png b/test/fixtures/plugin.filler/radar/dataset/order.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-dataset-order.png rename to test/fixtures/plugin.filler/radar/dataset/order.png diff --git a/test/fixtures/plugin.filler/fill-radar-dataset-span.json b/test/fixtures/plugin.filler/radar/dataset/span.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-dataset-span.json rename to test/fixtures/plugin.filler/radar/dataset/span.json diff --git a/test/fixtures/plugin.filler/fill-radar-dataset-span.png b/test/fixtures/plugin.filler/radar/dataset/span.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-dataset-span.png rename to test/fixtures/plugin.filler/radar/dataset/span.png diff --git a/test/fixtures/plugin.filler/fill-radar-dataset-spline.json b/test/fixtures/plugin.filler/radar/dataset/spline.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-dataset-spline.json rename to test/fixtures/plugin.filler/radar/dataset/spline.json diff --git a/test/fixtures/plugin.filler/fill-radar-dataset-spline.png b/test/fixtures/plugin.filler/radar/dataset/spline.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-dataset-spline.png rename to test/fixtures/plugin.filler/radar/dataset/spline.png diff --git a/test/fixtures/plugin.filler/fill-radar-value.json b/test/fixtures/plugin.filler/radar/value.json similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-value.json rename to test/fixtures/plugin.filler/radar/value.json diff --git a/test/fixtures/plugin.filler/fill-radar-value.png b/test/fixtures/plugin.filler/radar/value.png similarity index 100% rename from test/fixtures/plugin.filler/fill-radar-value.png rename to test/fixtures/plugin.filler/radar/value.png diff --git a/types/index.esm.d.ts b/types/index.esm.d.ts index f2a911829..d6f0d3009 100644 --- a/types/index.esm.d.ts +++ b/types/index.esm.d.ts @@ -1956,6 +1956,7 @@ export type DecimationOptions = LttbDecimationOptions | MinMaxDecimationOptions; export const Filler: Plugin; export interface FillerOptions { + drawTime: 'beforeDatasetDraw' | 'beforeDatasetsDraw'; propagate: boolean; }