From 1b261ab25b58dc9a012288d7b9a79ead27957021 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Mon, 29 Jul 2024 16:14:45 -0600 Subject: [PATCH 01/22] Add blogpost on flox heuristics --- src/posts/flox-smart/index.md | 159 ++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 src/posts/flox-smart/index.md diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md new file mode 100644 index 00000000..aecc35e3 --- /dev/null +++ b/src/posts/flox-smart/index.md @@ -0,0 +1,159 @@ +--- +title: flox: GroupBy, now with smarts!' +date: '2024-05-31' +authors: + - name: Deepak Cherian + github: dcherian + +summary: 'flox adds heuristics for automatically choosing an appropriate strategy with dask arrays!' +--- + +## What is flox? + +[`flox` implements](https://flox.readthedocs.io/) grouped reductions for chunked array types like cubed and dask using a tree reduction approach. +Tree reduction ([example](https://people.csail.mit.edu/xchen/gpu-programming/Lecture11-reduction.pdf)) are a parallel-friendly way of computing common reduction operations like `sum`, `mean` etc. +Without flox, Xarray shuffles or sorts the data to extract all values in a single group, and then runs the reduction group-by-group. +Depending on data layout ("chunking"), this shuffle can be quite expensive. +With flox installed, Xarray instead uses the parallel-friendly tree reduction approach for the same calculation. +In many cases, this is a massive improvement. +See our [previous blog post](https://xarray.dev/blog/flox) for more. + +Two key realizations influenced the development of flox: + +1. Array workloads frequently group by a relatively small in-memory array. Quite frequently those arrays have patterns to their values e.g. `"time.month"` is exactly periodic, `"time.dayofyear"` is approximately periodic (depending on calendar), `"time.year"` is commonly a monotonic increasing array. +2. An important difference between arrays and dataframes is that chunk sizes (or "partition sizes") for arrays can be quite small along the core-dimension of an operation. + +These two properties are particularly relevant for climatology calculations --- a common Xarray workload. + +## Tree reductions can be catastrophically bad + +For a catastrophic example, consider `ds.groupby("time.year").mean()`, or the equivalent `ds.resample(time="Y").mean()` for a 100 year long dataset of monthly averages with chunk size of **1** (or **4**) along the time dimension. +This is a fairly common format for climate model output. +The small chunk size along time is offset by much larger chunk sizes along the other dimensions --- commonly horizontal space (`x, y` or `latitude, longitude`). + +A naive tree reduction would accumulate all averaged values into a single output chunk of size 100. +Depending on the chunking of the input dataset, this may overload the worker memory and fail catastrophically. +More importantly, there is a lot of wasteful communication --- computing on the last year of data is completely independent of computing on the first year of the data, and there is no reason the two values need to reside in the same output chunk. + +## Avoiding catastrophe + +Thus `flox` quickly grew two new modes of computing the groupby reduction: +First, `method="blockwise"` which applies the grouped-reduction in a blockwise fashion. +This is great for `resample(time="Y").mean()` where we group by `"time.year"`, which is a monotonic increasing array. +With an appropriate (and usually quite cheap) rechunking, the problem is embarassingly parallel. + +Second, `method="cohorts"` which is a bit more subtle. +Consider `groupby("time.month")` for the monthly mean dataset i.e. grouping by an exactly periodic array. +When the chunk size along the core dimension "time" is a divisor of the period; so either 1, 2, 3, 4, or 6 in this case; groups tend to occur in cohorts ("groups of groups"). +For example, with a chunk size of 4, monthly mean input data for Jan, Feb, Mar, and April ("one cohort") are _always_ in the same chunk, and totally separate from any of the other months. +This means that we can run the tree reduction for each cohort (three cohorts in total: `JFMA | MJJA | SOND`) independently and expose more parallelism. +Doing so can significantly reduce compute times and in particular memory required for the computation. + +Importantly if there isn't much separation of groups into cohorts; example, the groups are randomly distributed, then we'd like the standard `method="map-reduce"` for low overhead. + +## Choosing a strategy is hard, and hard to teach. + +These strategies are great, but the downside is some sophistication is required to apply them. +Worse, they are hard to explain conceptually! I've tried! ([example 1](https://discourse.pangeo.io/t/optimizing-climatology-calculation-with-xarray-and-dask/2453/20?u=dcherian), [example 2](https://discourse.pangeo.io/t/understanding-optimal-zarr-chunking-scheme-for-a-climatology/2335)). + +What we need is to choose the appropriate strategy automatically. +And guess what, `flox>=0.9` will now choose an appropriate method automatically! + +## Problem statement + +Fundamentally, we know: + +1. the data layout or chunking. +2. the array we are grouping by, and can detect possible patterns in that array. + +We want to find all sets of groups that occupy similar sets of chunks. +For groups `A,B,C,D` that occupy the following chunks (chunk 0 is the first chunk along the core-dimension or the axis of reduction) + +``` +A: [0, 1, 2] +B: [1, 2, 3] +D: [5, 6, 7, 8] +E: [8] +X: [0, 3] +``` + +We want to detect the cohorts `{A,B,X}` and `{C, D}` with the following chunks. + +``` +[A, B, X]: [0, 1, 2, 3] +[C, D]: [5, 6, 7, 8] +``` + +Importantly, we do _not_ want to be dependent on detecting exact patterns, and prefer approximate solutions and heuristics. + +## The solution + +After a fun exploration involving such fun ideas as [locality-sensitive hashing](http://ekzhu.com/datasketch/lshensemble.html), and [all-pair set similarity search](https://www.cse.unsw.edu.au/~lxue/WWW08.pdf), I settled on the following algorithm. + +I use set _containment_, or a "normalized intersection", to determine the similarity the sets of chunks occupied by two different groups (`Q` and `X`). + +``` +C = |Q ∩ X| / |Q| ≤ 1 +``` + +Unlike Jaccard similarity, _containment_ [isn't skewed](http://ekzhu.com/datasketch/lshensemble.html) when one of the sets is much larger than the other. + +The steps are as follows: + +1. First determine which labels are present in each chunk. The distribution of labels across chunks + is represented internally as a 2D boolean sparse array `S[chunks, labels]`. `S[i, j] = 1` when + label `j` is present in chunk `i`. + +1. Now we can quickly determine a number of special cases: + + 1. Use `"blockwise"` when every group is contained to one block each. + 1. Use `"cohorts"` when every chunk only has a single group, but that group might extend across multiple chunks + 1. [and more](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L408-L426) + Here is an example: + ![bitmask-patterns](/../diagrams/bitmask-patterns-perfect.png) + + - On the left, is a monthly grouping for a monthly time series with chunk size 4. There are 3 non-overlapping cohorts so + `method="cohorts"` is perfect. + - On the right, is a resampling problem of a daily time series with chunk size 10 to 5-daily frequency. Two 5-day periods + are exactly contained in one chunk, so `method="blockwise"` is perfect. + +1. At this point, we want to merge groups in to cohorts when they occupy _approximately_ the same chunks. For each group `i` we can quickly compute containment against + all other groups `j` as `C = S.T @ S / number_chunks_per_group`. Here is `C` for a range of chunk sizes from 1 to 12, for computing + the monthly mean of a monthly time series problem, \[the title on each image is `(chunk size, sparsity)`\]. + + ```python + chunks = np.arange(1, 13) + labels = np.tile(np.arange(1, 13), 30) + ``` + + ![cohorts-schematic](/../diagrams/containment.png) + +1. To choose between `"map-reduce"` and `"cohorts"`, we need a summary measure of the degree to which the labels overlap with + each other. We can use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. + We use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. When sparsity is relatively high, we use `"map-reduce"`, otherwise we use `"cohorts"`. + +Cool, isn't it?! + +## What's next? + +flox' ability to do cool inferences entirely relies on the input chunking, which is a major user-tunable knob. +Perfect optimization still requires some user-tuned chunking. +Recent Xarray feature makes that a lot easier for time grouping: + +``` +from xarray.groupers import TimeResampler + +rechunked = ds.chunk(time=TimeResampler("YE")) +``` + +will rechunk so that a year of data is in a single chunk. + +Even so, it would be nice to automatically rechunk to minimize number of cohorts detected, or to a perfectly blockwise application. +A key limitation is that we have lost context. +The string `"time.month"` tells me that I am grouping a perfectly periodic array with period 12; similarly +the _string_ `"time.dayofyear"` tells me that I am grouping by a (quasi-)\_periodic array with period 365, and that group `366` may occur occasionally (depending on calendar). +This context is hard to infer from integer group labels `[1, 2, 3, 4, 5, ..., 1, 2, 3, 4, 5]`. + +One way to preserve context may be to use Xarray's new Grouper objects, and let them report ["preferred chunks"](https://github.com/pydata/xarray/blob/main/design_notes/grouper_objects.md#the-preferred_chunks-method-) for a particular grouping. +This would allow a downstream system like `flox` or `dask-expr` to take this in to account later (or even earlier!) in the pipeline. +That is an experiment for another day. From e04df4787e7cfb8bce7576814ad35b6962244441 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Mon, 29 Jul 2024 16:19:51 -0600 Subject: [PATCH 02/22] Comment out images for now --- src/posts/flox-smart/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index aecc35e3..fd56d5f8 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -110,7 +110,7 @@ The steps are as follows: 1. Use `"cohorts"` when every chunk only has a single group, but that group might extend across multiple chunks 1. [and more](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L408-L426) Here is an example: - ![bitmask-patterns](/../diagrams/bitmask-patterns-perfect.png) + - On the left, is a monthly grouping for a monthly time series with chunk size 4. There are 3 non-overlapping cohorts so `method="cohorts"` is perfect. @@ -126,7 +126,7 @@ The steps are as follows: labels = np.tile(np.arange(1, 13), 30) ``` - ![cohorts-schematic](/../diagrams/containment.png) + 1. To choose between `"map-reduce"` and `"cohorts"`, we need a summary measure of the degree to which the labels overlap with each other. We can use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. From 503a36bcb34e0262e83c2406a8eb423ab73eec70 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Mon, 29 Jul 2024 16:35:01 -0600 Subject: [PATCH 03/22] Update src/posts/flox-smart/index.md Co-authored-by: Anderson Banihirwe <13301940+andersy005@users.noreply.github.com> --- src/posts/flox-smart/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index fd56d5f8..3b9910ff 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -1,5 +1,5 @@ --- -title: flox: GroupBy, now with smarts!' +title: 'flox: GroupBy, now with smarts!' date: '2024-05-31' authors: - name: Deepak Cherian From 093a75ee64ee84b3b8bfb76ec832c2f8f75e9146 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Mon, 29 Jul 2024 16:29:01 -0600 Subject: [PATCH 04/22] edits --- src/posts/flox-smart/index.md | 48 +++++++++++++++++------------------ 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index 3b9910ff..2d6a40f6 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -21,23 +21,24 @@ See our [previous blog post](https://xarray.dev/blog/flox) for more. Two key realizations influenced the development of flox: 1. Array workloads frequently group by a relatively small in-memory array. Quite frequently those arrays have patterns to their values e.g. `"time.month"` is exactly periodic, `"time.dayofyear"` is approximately periodic (depending on calendar), `"time.year"` is commonly a monotonic increasing array. -2. An important difference between arrays and dataframes is that chunk sizes (or "partition sizes") for arrays can be quite small along the core-dimension of an operation. +2. Chunk sizes (or "partition sizes") for arrays can be quite small along the core-dimension of an operation. This is an important difference between arrays and dataframes! -These two properties are particularly relevant for climatology calculations --- a common Xarray workload. +These two properties are particularly relevant for "climatology" calculations (e.g. `groupby("time.month").mean()`) — a common Xarray workload. ## Tree reductions can be catastrophically bad For a catastrophic example, consider `ds.groupby("time.year").mean()`, or the equivalent `ds.resample(time="Y").mean()` for a 100 year long dataset of monthly averages with chunk size of **1** (or **4**) along the time dimension. This is a fairly common format for climate model output. -The small chunk size along time is offset by much larger chunk sizes along the other dimensions --- commonly horizontal space (`x, y` or `latitude, longitude`). +The small chunk size along time is offset by much larger chunk sizes along the other dimensions — commonly horizontal space (`x, y` or `latitude, longitude`). A naive tree reduction would accumulate all averaged values into a single output chunk of size 100. Depending on the chunking of the input dataset, this may overload the worker memory and fail catastrophically. -More importantly, there is a lot of wasteful communication --- computing on the last year of data is completely independent of computing on the first year of the data, and there is no reason the two values need to reside in the same output chunk. +More importantly, there is a lot of wasteful communication — computing on the last year of data is completely independent of computing on the first year of the data, and there is no reason the two values need to reside in the same output chunk. ## Avoiding catastrophe -Thus `flox` quickly grew two new modes of computing the groupby reduction: +Thus `flox` quickly grew two new modes of computing the groupby reduction. + First, `method="blockwise"` which applies the grouped-reduction in a blockwise fashion. This is great for `resample(time="Y").mean()` where we group by `"time.year"`, which is a monotonic increasing array. With an appropriate (and usually quite cheap) rechunking, the problem is embarassingly parallel. @@ -93,7 +94,7 @@ After a fun exploration involving such fun ideas as [locality-sensitive hashing] I use set _containment_, or a "normalized intersection", to determine the similarity the sets of chunks occupied by two different groups (`Q` and `X`). ``` -C = |Q ∩ X| / |Q| ≤ 1 +C = |Q ∩ X| / |Q| ≤ 1; (∩ is set intersection) ``` Unlike Jaccard similarity, _containment_ [isn't skewed](http://ekzhu.com/datasketch/lshensemble.html) when one of the sets is much larger than the other. @@ -109,29 +110,25 @@ The steps are as follows: 1. Use `"blockwise"` when every group is contained to one block each. 1. Use `"cohorts"` when every chunk only has a single group, but that group might extend across multiple chunks 1. [and more](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L408-L426) - Here is an example: - - - - On the left, is a monthly grouping for a monthly time series with chunk size 4. There are 3 non-overlapping cohorts so - `method="cohorts"` is perfect. - - On the right, is a resampling problem of a daily time series with chunk size 10 to 5-daily frequency. Two 5-day periods - are exactly contained in one chunk, so `method="blockwise"` is perfect. 1. At this point, we want to merge groups in to cohorts when they occupy _approximately_ the same chunks. For each group `i` we can quickly compute containment against - all other groups `j` as `C = S.T @ S / number_chunks_per_group`. Here is `C` for a range of chunk sizes from 1 to 12, for computing - the monthly mean of a monthly time series problem, \[the title on each image is `(chunk size, sparsity)`\]. - - ```python - chunks = np.arange(1, 13) - labels = np.tile(np.arange(1, 13), 30) - ``` - - + all other groups `j` as `C = S.T @ S / number_chunks_per_group`. 1. To choose between `"map-reduce"` and `"cohorts"`, we need a summary measure of the degree to which the labels overlap with each other. We can use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. We use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. When sparsity is relatively high, we use `"map-reduce"`, otherwise we use `"cohorts"`. +For more detail [see the docs](https://flox.readthedocs.io/en/latest/implementation.html#heuristics). + +Here is C for a range of chunk sizes from 1 to 12, for computing `groupby("time.month")` of a monthly mean dataset, [the title on each image is (chunk size, sparsity)]. +![flox sparsity image](https://flox.readthedocs.io/en/latest/_images/containment.png) + +flox will choose: + +1. `"blockwise"` for chunk size 1, +2. `"cohorts"` for (2, 3, 4, 6, 12), +3. and `"map-reduce"` for the rest. + Cool, isn't it?! ## What's next? @@ -140,7 +137,7 @@ flox' ability to do cool inferences entirely relies on the input chunking, which Perfect optimization still requires some user-tuned chunking. Recent Xarray feature makes that a lot easier for time grouping: -``` +```python from xarray.groupers import TimeResampler rechunked = ds.chunk(time=TimeResampler("YE")) @@ -149,10 +146,11 @@ rechunked = ds.chunk(time=TimeResampler("YE")) will rechunk so that a year of data is in a single chunk. Even so, it would be nice to automatically rechunk to minimize number of cohorts detected, or to a perfectly blockwise application. -A key limitation is that we have lost context. +A key limitation is that we have lost _context_. The string `"time.month"` tells me that I am grouping a perfectly periodic array with period 12; similarly -the _string_ `"time.dayofyear"` tells me that I am grouping by a (quasi-)\_periodic array with period 365, and that group `366` may occur occasionally (depending on calendar). +the _string_ `"time.dayofyear"` tells me that I am grouping by a (quasi-)periodic array with period 365, and that group `366` may occur occasionally (depending on calendar). This context is hard to infer from integer group labels `[1, 2, 3, 4, 5, ..., 1, 2, 3, 4, 5]`. +/[Get in touch](https://github.com/xarray-contrib/flox/issues) if you have ideas for how to do this inference!\*. One way to preserve context may be to use Xarray's new Grouper objects, and let them report ["preferred chunks"](https://github.com/pydata/xarray/blob/main/design_notes/grouper_objects.md#the-preferred_chunks-method-) for a particular grouping. This would allow a downstream system like `flox` or `dask-expr` to take this in to account later (or even earlier!) in the pipeline. From 44a8f02279d303bbeb1d5e73a5b062cd678ff534 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Mon, 29 Jul 2024 16:43:41 -0600 Subject: [PATCH 05/22] more edits --- src/posts/flox-smart/index.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index 2d6a40f6..aca68859 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -8,6 +8,10 @@ authors: summary: 'flox adds heuristics for automatically choosing an appropriate strategy with dask arrays!' --- +## TL;DR + +`flox>=0.9` adds heuristics for automatically choosing an appropriate strategy with dask arrays! Here I describe how. + ## What is flox? [`flox` implements](https://flox.readthedocs.io/) grouped reductions for chunked array types like cubed and dask using a tree reduction approach. @@ -42,17 +46,19 @@ Thus `flox` quickly grew two new modes of computing the groupby reduction. First, `method="blockwise"` which applies the grouped-reduction in a blockwise fashion. This is great for `resample(time="Y").mean()` where we group by `"time.year"`, which is a monotonic increasing array. With an appropriate (and usually quite cheap) rechunking, the problem is embarassingly parallel. +![blockwise](https://flox.readthedocs.io/en/latest/_images/new-blockwise-annotated.svg) Second, `method="cohorts"` which is a bit more subtle. Consider `groupby("time.month")` for the monthly mean dataset i.e. grouping by an exactly periodic array. When the chunk size along the core dimension "time" is a divisor of the period; so either 1, 2, 3, 4, or 6 in this case; groups tend to occur in cohorts ("groups of groups"). For example, with a chunk size of 4, monthly mean input data for Jan, Feb, Mar, and April ("one cohort") are _always_ in the same chunk, and totally separate from any of the other months. +![monthly cohorts](https://flox.readthedocs.io/en/latest/_images/cohorts-month-chunk4.png) This means that we can run the tree reduction for each cohort (three cohorts in total: `JFMA | MJJA | SOND`) independently and expose more parallelism. Doing so can significantly reduce compute times and in particular memory required for the computation. Importantly if there isn't much separation of groups into cohorts; example, the groups are randomly distributed, then we'd like the standard `method="map-reduce"` for low overhead. -## Choosing a strategy is hard, and hard to teach. +## Choosing a strategy is hard, and harder to teach. These strategies are great, but the downside is some sophistication is required to apply them. Worse, they are hard to explain conceptually! I've tried! ([example 1](https://discourse.pangeo.io/t/optimizing-climatology-calculation-with-xarray-and-dask/2453/20?u=dcherian), [example 2](https://discourse.pangeo.io/t/understanding-optimal-zarr-chunking-scheme-for-a-climatology/2335)). @@ -104,16 +110,12 @@ The steps are as follows: 1. First determine which labels are present in each chunk. The distribution of labels across chunks is represented internally as a 2D boolean sparse array `S[chunks, labels]`. `S[i, j] = 1` when label `j` is present in chunk `i`. - 1. Now we can quickly determine a number of special cases: - 1. Use `"blockwise"` when every group is contained to one block each. 1. Use `"cohorts"` when every chunk only has a single group, but that group might extend across multiple chunks 1. [and more](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L408-L426) - 1. At this point, we want to merge groups in to cohorts when they occupy _approximately_ the same chunks. For each group `i` we can quickly compute containment against all other groups `j` as `C = S.T @ S / number_chunks_per_group`. - 1. To choose between `"map-reduce"` and `"cohorts"`, we need a summary measure of the degree to which the labels overlap with each other. We can use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. We use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. When sparsity is relatively high, we use `"map-reduce"`, otherwise we use `"cohorts"`. @@ -131,6 +133,9 @@ flox will choose: Cool, isn't it?! +Importantly this inference is fast — 400ms for the [US county GroupBy problem in our previous post](https://xarray.dev/blog/flox)! +But we have not tried with bigger problems (example: GroupBy(100,000 watersheds) in the US). + ## What's next? flox' ability to do cool inferences entirely relies on the input chunking, which is a major user-tunable knob. @@ -150,7 +155,7 @@ A key limitation is that we have lost _context_. The string `"time.month"` tells me that I am grouping a perfectly periodic array with period 12; similarly the _string_ `"time.dayofyear"` tells me that I am grouping by a (quasi-)periodic array with period 365, and that group `366` may occur occasionally (depending on calendar). This context is hard to infer from integer group labels `[1, 2, 3, 4, 5, ..., 1, 2, 3, 4, 5]`. -/[Get in touch](https://github.com/xarray-contrib/flox/issues) if you have ideas for how to do this inference!\*. +_[Get in touch](https://github.com/xarray-contrib/flox/issues) if you have ideas for how to do this inference!_. One way to preserve context may be to use Xarray's new Grouper objects, and let them report ["preferred chunks"](https://github.com/pydata/xarray/blob/main/design_notes/grouper_objects.md#the-preferred_chunks-method-) for a particular grouping. This would allow a downstream system like `flox` or `dask-expr` to take this in to account later (or even earlier!) in the pipeline. From 105c22d8a7ed473114674189cda2ab366947f65f Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Mon, 29 Jul 2024 20:30:23 -0600 Subject: [PATCH 06/22] more edits --- src/posts/flox-smart/index.md | 74 +++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index aca68859..3b49dde3 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -14,12 +14,15 @@ summary: 'flox adds heuristics for automatically choosing an appropriate strateg ## What is flox? -[`flox` implements](https://flox.readthedocs.io/) grouped reductions for chunked array types like cubed and dask using a tree reduction approach. -Tree reduction ([example](https://people.csail.mit.edu/xchen/gpu-programming/Lecture11-reduction.pdf)) are a parallel-friendly way of computing common reduction operations like `sum`, `mean` etc. -Without flox, Xarray shuffles or sorts the data to extract all values in a single group, and then runs the reduction group-by-group. -Depending on data layout ("chunking"), this shuffle can be quite expensive. -With flox installed, Xarray instead uses the parallel-friendly tree reduction approach for the same calculation. +[`flox` implements](https://flox.readthedocs.io/) grouped reductions for chunked array types like [cubed](https://cubed-dev.github.io/cubed/) and [dask](https://docs.dask.org/en/stable/array.html) using tree reductions. +Tree reductions ([example](https://people.csail.mit.edu/xchen/gpu-programming/Lecture11-reduction.pdf)) are a parallel-friendly way of computing common reduction operations like `sum`, `mean` etc. +Without flox, Xarray effectively shuffles — sorts the data to extract all values in a single group — and then runs the reduction group-by-group. +Depending on data layout or "chunking" this shuffle can be quite expensive. +![shuffle](https://flox.readthedocs.io/en/latest/_images/new-split-apply-combine-annotated.svg) +With flox installed, Xarray instead uses its parallel-friendly tree reduction. In many cases, this is a massive improvement. +Notice how much cleaner the graph is in this image: +![map-reduce](https://flox.readthedocs.io/en/latest/_images/new-map-reduce-reindex-True-annotated.svg) See our [previous blog post](https://xarray.dev/blog/flox) for more. Two key realizations influenced the development of flox: @@ -27,17 +30,18 @@ Two key realizations influenced the development of flox: 1. Array workloads frequently group by a relatively small in-memory array. Quite frequently those arrays have patterns to their values e.g. `"time.month"` is exactly periodic, `"time.dayofyear"` is approximately periodic (depending on calendar), `"time.year"` is commonly a monotonic increasing array. 2. Chunk sizes (or "partition sizes") for arrays can be quite small along the core-dimension of an operation. This is an important difference between arrays and dataframes! -These two properties are particularly relevant for "climatology" calculations (e.g. `groupby("time.month").mean()`) — a common Xarray workload. +These two properties are particularly relevant for "climatology" calculations (e.g. `groupby("time.month").mean()`) — a common Xarray workload in the Earth Sciences. ## Tree reductions can be catastrophically bad -For a catastrophic example, consider `ds.groupby("time.year").mean()`, or the equivalent `ds.resample(time="Y").mean()` for a 100 year long dataset of monthly averages with chunk size of **1** (or **4**) along the time dimension. +Consider `ds.groupby("time.year").mean()`, or the equivalent `ds.resample(time="Y").mean()` for a 100 year long dataset of monthly averages with chunk size of **1** (or **4**) along the time dimension. This is a fairly common format for climate model output. The small chunk size along time is offset by much larger chunk sizes along the other dimensions — commonly horizontal space (`x, y` or `latitude, longitude`). -A naive tree reduction would accumulate all averaged values into a single output chunk of size 100. -Depending on the chunking of the input dataset, this may overload the worker memory and fail catastrophically. -More importantly, there is a lot of wasteful communication — computing on the last year of data is completely independent of computing on the first year of the data, and there is no reason the two values need to reside in the same output chunk. +A naive tree reduction would accumulate all averaged values into a single output chunk of size 100 — one value per year for 100 years. +Depending on the chunking of the input dataset, this may overload the final worker's memory and fail catastrophically. +More importantly, there is a lot of wasteful communication — computing on the last year of data is completely independent of computing on the first year of the data, and there is no reason the results for the two years need to reside in the same output chunk. +This issue does not arise for regular reductions where the final result depends on the values in all chunks, and all data along the reduced axes are reduced down to one final value. ## Avoiding catastrophe @@ -45,26 +49,26 @@ Thus `flox` quickly grew two new modes of computing the groupby reduction. First, `method="blockwise"` which applies the grouped-reduction in a blockwise fashion. This is great for `resample(time="Y").mean()` where we group by `"time.year"`, which is a monotonic increasing array. -With an appropriate (and usually quite cheap) rechunking, the problem is embarassingly parallel. +With an appropriate (and usually quite cheap) rechunking, the problem is embarrassingly parallel. ![blockwise](https://flox.readthedocs.io/en/latest/_images/new-blockwise-annotated.svg) Second, `method="cohorts"` which is a bit more subtle. Consider `groupby("time.month")` for the monthly mean dataset i.e. grouping by an exactly periodic array. When the chunk size along the core dimension "time" is a divisor of the period; so either 1, 2, 3, 4, or 6 in this case; groups tend to occur in cohorts ("groups of groups"). -For example, with a chunk size of 4, monthly mean input data for Jan, Feb, Mar, and April ("one cohort") are _always_ in the same chunk, and totally separate from any of the other months. +For example, with a chunk size of 4, monthly mean input data for the "cohort" Jan/Feb/Mar/Apr are _always_ in the same chunk, and totally separate from any of the other months. +Here is a schematic illustration where each month is represented by a different shade of red: ![monthly cohorts](https://flox.readthedocs.io/en/latest/_images/cohorts-month-chunk4.png) This means that we can run the tree reduction for each cohort (three cohorts in total: `JFMA | MJJA | SOND`) independently and expose more parallelism. Doing so can significantly reduce compute times and in particular memory required for the computation. -Importantly if there isn't much separation of groups into cohorts; example, the groups are randomly distributed, then we'd like the standard `method="map-reduce"` for low overhead. +Importantly if there isn't much separation of groups into cohorts; example, the groups are randomly distributed, then it's hard to do better than the standard `method="map-reduce"`. ## Choosing a strategy is hard, and harder to teach. -These strategies are great, but the downside is some sophistication is required to apply them. +These strategies are great, but the downside is that some sophistication is required to apply them. Worse, they are hard to explain conceptually! I've tried! ([example 1](https://discourse.pangeo.io/t/optimizing-climatology-calculation-with-xarray-and-dask/2453/20?u=dcherian), [example 2](https://discourse.pangeo.io/t/understanding-optimal-zarr-chunking-scheme-for-a-climatology/2335)). What we need is to choose the appropriate strategy automatically. -And guess what, `flox>=0.9` will now choose an appropriate method automatically! ## Problem statement @@ -103,7 +107,7 @@ I use set _containment_, or a "normalized intersection", to determine the simila C = |Q ∩ X| / |Q| ≤ 1; (∩ is set intersection) ``` -Unlike Jaccard similarity, _containment_ [isn't skewed](http://ekzhu.com/datasketch/lshensemble.html) when one of the sets is much larger than the other. +Unlike [Jaccard similarity](https://en.wikipedia.org/wiki/Jaccard_index), _containment_ [isn't skewed](http://ekzhu.com/datasketch/lshensemble.html) when one of the sets is much larger than the other. The steps are as follows: @@ -114,18 +118,22 @@ The steps are as follows: 1. Use `"blockwise"` when every group is contained to one block each. 1. Use `"cohorts"` when every chunk only has a single group, but that group might extend across multiple chunks 1. [and more](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L408-L426) -1. At this point, we want to merge groups in to cohorts when they occupy _approximately_ the same chunks. For each group `i` we can quickly compute containment against - all other groups `j` as `C = S.T @ S / number_chunks_per_group`. +1. Now invert `S` to compute an initial set of cohorts whose groups are in the same exact chunks (this is another groupby!). + Later we will want to merge together the detected cohorts when they occupy _approximately_ the same chunks, using the containment metric. +1. For that we first quickly compute containment for all groups `i` against all other groups `j` as `C = S.T @ S / number_chunks_per_group`. 1. To choose between `"map-reduce"` and `"cohorts"`, we need a summary measure of the degree to which the labels overlap with each other. We can use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. We use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. When sparsity is relatively high, we use `"map-reduce"`, otherwise we use `"cohorts"`. +1. If the sparsity is high enough, we merge together similar cohorts using a for-loop. +1. Finally we execute one tree-reduction per cohort and concatenate the results. -For more detail [see the docs](https://flox.readthedocs.io/en/latest/implementation.html#heuristics). +For more detail [see the docs](https://flox.readthedocs.io/en/latest/implementation.html#heuristics) or [the code](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L336). +Suggestions and improvements are very welcome! -Here is C for a range of chunk sizes from 1 to 12, for computing `groupby("time.month")` of a monthly mean dataset, [the title on each image is (chunk size, sparsity)]. +Here is `C` for a range of chunk sizes from 1 to 12, for computing `groupby("time.month")` of a monthly mean dataset, [the title on each image is (chunk size, sparsity)]. ![flox sparsity image](https://flox.readthedocs.io/en/latest/_images/containment.png) -flox will choose: +Given the above `C`, flox will choose: 1. `"blockwise"` for chunk size 1, 2. `"cohorts"` for (2, 3, 4, 6, 12), @@ -133,14 +141,13 @@ flox will choose: Cool, isn't it?! -Importantly this inference is fast — 400ms for the [US county GroupBy problem in our previous post](https://xarray.dev/blog/flox)! +Importantly this inference is fast — [400ms for the US county](https://flox.readthedocs.io/en/latest/implementation.html#example-spatial-grouping) GroupBy problem in our [previous post](https://xarray.dev/blog/flox)! But we have not tried with bigger problems (example: GroupBy(100,000 watersheds) in the US). ## What's next? -flox' ability to do cool inferences entirely relies on the input chunking, which is a major user-tunable knob. -Perfect optimization still requires some user-tuned chunking. -Recent Xarray feature makes that a lot easier for time grouping: +flox' ability to do such inferences relies entirely on the input chunking, a big knob. +A recent Xarray feature makes such rechunking a lot easier for time grouping: ```python from xarray.groupers import TimeResampler @@ -150,13 +157,14 @@ rechunked = ds.chunk(time=TimeResampler("YE")) will rechunk so that a year of data is in a single chunk. -Even so, it would be nice to automatically rechunk to minimize number of cohorts detected, or to a perfectly blockwise application. -A key limitation is that we have lost _context_. -The string `"time.month"` tells me that I am grouping a perfectly periodic array with period 12; similarly -the _string_ `"time.dayofyear"` tells me that I am grouping by a (quasi-)periodic array with period 365, and that group `366` may occur occasionally (depending on calendar). -This context is hard to infer from integer group labels `[1, 2, 3, 4, 5, ..., 1, 2, 3, 4, 5]`. -_[Get in touch](https://github.com/xarray-contrib/flox/issues) if you have ideas for how to do this inference!_. +Even so, it would be nice to automatically rechunk to minimize number of cohorts detected, or to a perfectly blockwise application when that's cheap. +A challenge here is that we have lost _context_ when moving from Xarray to flox. +The string `"time.month"` tells Xarray that I am grouping a perfectly periodic array with period 12; similarly +the _string_ `"time.dayofyear"` tells Xarray that I am grouping by a (quasi-)periodic array with period 365, and that group `366` may occur occasionally (depending on calendar). +But Xarray passes flox an array of integer group labels `[1, 2, 3, 4, 5, ..., 1, 2, 3, 4, 5]`. +It's hard to infer the context from that! +_[Get in touch](https://github.com/xarray-contrib/flox/issues) if you have ideas for how to do this inference._ -One way to preserve context may be to use Xarray's new Grouper objects, and let them report ["preferred chunks"](https://github.com/pydata/xarray/blob/main/design_notes/grouper_objects.md#the-preferred_chunks-method-) for a particular grouping. -This would allow a downstream system like `flox` or `dask-expr` to take this in to account later (or even earlier!) in the pipeline. +One way to preserve context may be be to have Xarray's new Grouper objects report ["preferred chunks"](https://github.com/pydata/xarray/blob/main/design_notes/grouper_objects.md#the-preferred_chunks-method-) for a particular grouping. +This would allow a downstream system like `flox` or `cubed` or `dask-expr` to take this in to account later (or even earlier!) in the pipeline. That is an experiment for another day. From 010f01d69ed7a416ac2201930d631126857bd107 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Tue, 30 Jul 2024 16:50:23 -0600 Subject: [PATCH 07/22] more edits --- src/posts/flox-smart/index.md | 61 ++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index 3b49dde3..42a5cbde 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -10,12 +10,14 @@ summary: 'flox adds heuristics for automatically choosing an appropriate strateg ## TL;DR -`flox>=0.9` adds heuristics for automatically choosing an appropriate strategy with dask arrays! Here I describe how. +`flox>=0.9` now automatically optimizes GroupBy reductions with dask arrays to reduce memory usage and increase parallelism! Here I describe how. ## What is flox? [`flox` implements](https://flox.readthedocs.io/) grouped reductions for chunked array types like [cubed](https://cubed-dev.github.io/cubed/) and [dask](https://docs.dask.org/en/stable/array.html) using tree reductions. Tree reductions ([example](https://people.csail.mit.edu/xchen/gpu-programming/Lecture11-reduction.pdf)) are a parallel-friendly way of computing common reduction operations like `sum`, `mean` etc. +Briefly, one computes the reduction for a subset of the array $N$ chunks at a time in parallel, then combines those results together again $N$ chunks at a time, until we have the final result. + Without flox, Xarray effectively shuffles — sorts the data to extract all values in a single group — and then runs the reduction group-by-group. Depending on data layout or "chunking" this shuffle can be quite expensive. ![shuffle](https://flox.readthedocs.io/en/latest/_images/new-split-apply-combine-annotated.svg) @@ -25,13 +27,6 @@ Notice how much cleaner the graph is in this image: ![map-reduce](https://flox.readthedocs.io/en/latest/_images/new-map-reduce-reindex-True-annotated.svg) See our [previous blog post](https://xarray.dev/blog/flox) for more. -Two key realizations influenced the development of flox: - -1. Array workloads frequently group by a relatively small in-memory array. Quite frequently those arrays have patterns to their values e.g. `"time.month"` is exactly periodic, `"time.dayofyear"` is approximately periodic (depending on calendar), `"time.year"` is commonly a monotonic increasing array. -2. Chunk sizes (or "partition sizes") for arrays can be quite small along the core-dimension of an operation. This is an important difference between arrays and dataframes! - -These two properties are particularly relevant for "climatology" calculations (e.g. `groupby("time.month").mean()`) — a common Xarray workload in the Earth Sciences. - ## Tree reductions can be catastrophically bad Consider `ds.groupby("time.year").mean()`, or the equivalent `ds.resample(time="Y").mean()` for a 100 year long dataset of monthly averages with chunk size of **1** (or **4**) along the time dimension. @@ -41,11 +36,17 @@ The small chunk size along time is offset by much larger chunk sizes along the o A naive tree reduction would accumulate all averaged values into a single output chunk of size 100 — one value per year for 100 years. Depending on the chunking of the input dataset, this may overload the final worker's memory and fail catastrophically. More importantly, there is a lot of wasteful communication — computing on the last year of data is completely independent of computing on the first year of the data, and there is no reason the results for the two years need to reside in the same output chunk. -This issue does not arise for regular reductions where the final result depends on the values in all chunks, and all data along the reduced axes are reduced down to one final value. +This issue does _not_ arise for regular reductions where the final result depends on the values in all chunks, and all data along the reduced axes are reduced down to one final value. ## Avoiding catastrophe Thus `flox` quickly grew two new modes of computing the groupby reduction. +Two key realizations influenced that development: + +1. Array workloads frequently group by a relatively small in-memory array. Quite frequently those arrays have patterns to their values e.g. `"time.month"` is exactly periodic, `"time.dayofyear"` is approximately periodic (depending on calendar), `"time.year"` is commonly a monotonic increasing array. +2. Chunk sizes (or "partition sizes") for arrays can be quite small along the core-dimension of an operation. This is an important difference between arrays and dataframes! + +These two properties are particularly relevant for "climatology" calculations (e.g. `groupby("time.month").mean()`) — a common Xarray workload in the Earth Sciences. First, `method="blockwise"` which applies the grouped-reduction in a blockwise fashion. This is great for `resample(time="Y").mean()` where we group by `"time.year"`, which is a monotonic increasing array. @@ -61,7 +62,7 @@ Here is a schematic illustration where each month is represented by a different This means that we can run the tree reduction for each cohort (three cohorts in total: `JFMA | MJJA | SOND`) independently and expose more parallelism. Doing so can significantly reduce compute times and in particular memory required for the computation. -Importantly if there isn't much separation of groups into cohorts; example, the groups are randomly distributed, then it's hard to do better than the standard `method="map-reduce"`. +If there isn't much separation of groups into cohorts, like when groups are randomly distributed across chunks, then it's hard to do better than the standard `method="map-reduce"`. ## Choosing a strategy is hard, and harder to teach. @@ -101,7 +102,7 @@ Importantly, we do _not_ want to be dependent on detecting exact patterns, and p After a fun exploration involving such fun ideas as [locality-sensitive hashing](http://ekzhu.com/datasketch/lshensemble.html), and [all-pair set similarity search](https://www.cse.unsw.edu.au/~lxue/WWW08.pdf), I settled on the following algorithm. -I use set _containment_, or a "normalized intersection", to determine the similarity the sets of chunks occupied by two different groups (`Q` and `X`). +I use set _containment_, or a "normalized intersection", to determine the similarity between the sets of chunks occupied by two different groups (`Q` and `X`). ``` C = |Q ∩ X| / |Q| ≤ 1; (∩ is set intersection) @@ -114,23 +115,34 @@ The steps are as follows: 1. First determine which labels are present in each chunk. The distribution of labels across chunks is represented internally as a 2D boolean sparse array `S[chunks, labels]`. `S[i, j] = 1` when label `j` is present in chunk `i`. -1. Now we can quickly determine a number of special cases: - 1. Use `"blockwise"` when every group is contained to one block each. - 1. Use `"cohorts"` when every chunk only has a single group, but that group might extend across multiple chunks - 1. [and more](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L408-L426) 1. Now invert `S` to compute an initial set of cohorts whose groups are in the same exact chunks (this is another groupby!). Later we will want to merge together the detected cohorts when they occupy _approximately_ the same chunks, using the containment metric. +1. Now we can quickly determine a number of special cases and exit early: + 1. Use `"blockwise"` when every group is contained to one block each. + 1. Use `"cohorts"` when + 1. every chunk only has a single group, but that group might extend across multiple chunks; and + 1. existing cohorts don't overlap at all. +1. [and more](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L408-L426) + +If we reach here, then we want to merge together any detected cohorts that substantially overlap with each other. + 1. For that we first quickly compute containment for all groups `i` against all other groups `j` as `C = S.T @ S / number_chunks_per_group`. 1. To choose between `"map-reduce"` and `"cohorts"`, we need a summary measure of the degree to which the labels overlap with - each other. We can use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. - We use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. When sparsity is relatively high, we use `"map-reduce"`, otherwise we use `"cohorts"`. -1. If the sparsity is high enough, we merge together similar cohorts using a for-loop. -1. Finally we execute one tree-reduction per cohort and concatenate the results. + each other. We use _sparsity_ --- the number of non-zero elements in `C` divided by the number of elements in `C`, `C.nnz/C.size`. + When sparsity is relatively high, we use `"map-reduce"`, otherwise we use `"cohorts"`. +1. If the sparsity is low enough, we merge together similar cohorts using a for-loop. For more detail [see the docs](https://flox.readthedocs.io/en/latest/implementation.html#heuristics) or [the code](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L336). Suggestions and improvements are very welcome! -Here is `C` for a range of chunk sizes from 1 to 12, for computing `groupby("time.month")` of a monthly mean dataset, [the title on each image is (chunk size, sparsity)]. +Here is containment `C[i, j]` for a range of chunk sizes from 1 to 12, for an input array with 12 monthly mean time steps, +for computing `groupby("time.month")` of a monthly mean dataset. +These are colored so that light yellow is $C=0$, and dark purple is $C=1$. +The title on each image is (chunk size, sparsity). +`C[i,j] = 1` when the chunks occupied by group `i` perfectly overlaps with those occupied by group `j` (so the diagonal elements +are always 1). +When the chunksize _is_ a divisor of the period 12, $C$ is a [block diagonal](https://en.wikipedia.org/wiki/Block_matrix) matrix. +When the chunksize _is not_ a divisor of the period 12, $C$ is much less sparse in comparison. ![flox sparsity image](https://flox.readthedocs.io/en/latest/_images/containment.png) Given the above `C`, flox will choose: @@ -146,8 +158,10 @@ But we have not tried with bigger problems (example: GroupBy(100,000 watersheds) ## What's next? -flox' ability to do such inferences relies entirely on the input chunking, a big knob. -A recent Xarray feature makes such rechunking a lot easier for time grouping: +flox' ability to do cleanly infer an optimal strategy relies entirely on the input chunking making such optimization possible. +This is a big knob. +A brand new [Xarray feature](https://docs.xarray.dev/en/stable/user-guide/groupby.html#grouper-objects) does make such rechunking +a lot easier for time grouping in particular: ```python from xarray.groupers import TimeResampler @@ -156,13 +170,14 @@ rechunked = ds.chunk(time=TimeResampler("YE")) ``` will rechunk so that a year of data is in a single chunk. - Even so, it would be nice to automatically rechunk to minimize number of cohorts detected, or to a perfectly blockwise application when that's cheap. + A challenge here is that we have lost _context_ when moving from Xarray to flox. The string `"time.month"` tells Xarray that I am grouping a perfectly periodic array with period 12; similarly the _string_ `"time.dayofyear"` tells Xarray that I am grouping by a (quasi-)periodic array with period 365, and that group `366` may occur occasionally (depending on calendar). But Xarray passes flox an array of integer group labels `[1, 2, 3, 4, 5, ..., 1, 2, 3, 4, 5]`. It's hard to infer the context from that! +Though one approach might frame the problem as: what rechunking would transform `C` to a block diagonal matrix. _[Get in touch](https://github.com/xarray-contrib/flox/issues) if you have ideas for how to do this inference._ One way to preserve context may be be to have Xarray's new Grouper objects report ["preferred chunks"](https://github.com/pydata/xarray/blob/main/design_notes/grouper_objects.md#the-preferred_chunks-method-) for a particular grouping. From 1136f29e10a0956d6b57ed9534cc6084008cd921 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Tue, 30 Jul 2024 20:55:09 -0600 Subject: [PATCH 08/22] more edits --- src/posts/flox-smart/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index 42a5cbde..7c027ec9 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -16,7 +16,7 @@ summary: 'flox adds heuristics for automatically choosing an appropriate strateg [`flox` implements](https://flox.readthedocs.io/) grouped reductions for chunked array types like [cubed](https://cubed-dev.github.io/cubed/) and [dask](https://docs.dask.org/en/stable/array.html) using tree reductions. Tree reductions ([example](https://people.csail.mit.edu/xchen/gpu-programming/Lecture11-reduction.pdf)) are a parallel-friendly way of computing common reduction operations like `sum`, `mean` etc. -Briefly, one computes the reduction for a subset of the array $N$ chunks at a time in parallel, then combines those results together again $N$ chunks at a time, until we have the final result. +Briefly, one computes the reduction for a subset of the array N chunks at a time in parallel, then combines those results together again N chunks at a time, until we have the final result. Without flox, Xarray effectively shuffles — sorts the data to extract all values in a single group — and then runs the reduction group-by-group. Depending on data layout or "chunking" this shuffle can be quite expensive. @@ -57,12 +57,12 @@ Second, `method="cohorts"` which is a bit more subtle. Consider `groupby("time.month")` for the monthly mean dataset i.e. grouping by an exactly periodic array. When the chunk size along the core dimension "time" is a divisor of the period; so either 1, 2, 3, 4, or 6 in this case; groups tend to occur in cohorts ("groups of groups"). For example, with a chunk size of 4, monthly mean input data for the "cohort" Jan/Feb/Mar/Apr are _always_ in the same chunk, and totally separate from any of the other months. -Here is a schematic illustration where each month is represented by a different shade of red: +Here is a schematic illustration where each month is represented by a different shade of red and a single chunk contains 4 months: ![monthly cohorts](https://flox.readthedocs.io/en/latest/_images/cohorts-month-chunk4.png) This means that we can run the tree reduction for each cohort (three cohorts in total: `JFMA | MJJA | SOND`) independently and expose more parallelism. Doing so can significantly reduce compute times and in particular memory required for the computation. -If there isn't much separation of groups into cohorts, like when groups are randomly distributed across chunks, then it's hard to do better than the standard `method="map-reduce"`. +Finally, if there isn't much separation of groups into cohorts, like when groups are randomly distributed across chunks, then it's hard to do better than the standard `method="map-reduce"`. ## Choosing a strategy is hard, and harder to teach. From 1383ad8a1a2689a5b019ecc397f8f70ff79c9d05 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Tue, 30 Jul 2024 22:01:33 -0600 Subject: [PATCH 09/22] more edits --- src/posts/flox-smart/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index 7c027ec9..03d530fa 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -20,6 +20,7 @@ Briefly, one computes the reduction for a subset of the array N chunks at a time Without flox, Xarray effectively shuffles — sorts the data to extract all values in a single group — and then runs the reduction group-by-group. Depending on data layout or "chunking" this shuffle can be quite expensive. +Here's a schematic of an array with 5 chunks arranged vertically, and each chunk has 10 elements each of which are colored by group. ![shuffle](https://flox.readthedocs.io/en/latest/_images/new-split-apply-combine-annotated.svg) With flox installed, Xarray instead uses its parallel-friendly tree reduction. In many cases, this is a massive improvement. From 5a2bb655fc0af625c012485e6ca05ebba5785bd7 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Tue, 30 Jul 2024 22:02:58 -0600 Subject: [PATCH 10/22] edit --- src/posts/flox-smart/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index 03d530fa..f9694f3b 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -10,7 +10,7 @@ summary: 'flox adds heuristics for automatically choosing an appropriate strateg ## TL;DR -`flox>=0.9` now automatically optimizes GroupBy reductions with dask arrays to reduce memory usage and increase parallelism! Here I describe how. +`flox>=0.9` now automatically optimizes GroupBy reductions with dask arrays to reduce memory usage and increase parallelism! Here I describe how. To opt in, simply set `method=None` if you were setting it explicitly previously. ## What is flox? From 1cc7eb5b9a30381e11e3504f51edbb83aa147c41 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Tue, 30 Jul 2024 22:06:14 -0600 Subject: [PATCH 11/22] edits --- src/posts/flox-smart/index.md | 40 ++++++++++++++++------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index f9694f3b..a5bb9434 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -26,7 +26,7 @@ With flox installed, Xarray instead uses its parallel-friendly tree reduction. In many cases, this is a massive improvement. Notice how much cleaner the graph is in this image: ![map-reduce](https://flox.readthedocs.io/en/latest/_images/new-map-reduce-reindex-True-annotated.svg) -See our [previous blog post](https://xarray.dev/blog/flox) for more. +See our [previous blog post](https://xarray.dev/blog/flox) or the [docs](https://flox.readthedocs.io/en/latest/implementation.html#method-map-reduce) for more. ## Tree reductions can be catastrophically bad @@ -45,7 +45,7 @@ Thus `flox` quickly grew two new modes of computing the groupby reduction. Two key realizations influenced that development: 1. Array workloads frequently group by a relatively small in-memory array. Quite frequently those arrays have patterns to their values e.g. `"time.month"` is exactly periodic, `"time.dayofyear"` is approximately periodic (depending on calendar), `"time.year"` is commonly a monotonic increasing array. -2. Chunk sizes (or "partition sizes") for arrays can be quite small along the core-dimension of an operation. This is an important difference between arrays and dataframes! +2. Chunk sizes (or "partition sizes") for arrays can be quite small along the core-dimension of an operation. So a grouped reduction applied blockwise need not reduce the data by much (or any!) at all. This is an important difference between arrays and dataframes! These two properties are particularly relevant for "climatology" calculations (e.g. `groupby("time.month").mean()`) — a common Xarray workload in the Earth Sciences. @@ -84,16 +84,16 @@ For groups `A,B,C,D` that occupy the following chunks (chunk 0 is the first chun ``` A: [0, 1, 2] -B: [1, 2, 3] -D: [5, 6, 7, 8] -E: [8] -X: [0, 3] +B: [1, 2, 3, 4] +C: [5, 6, 7, 8] +D: [8] +X: [0, 4] ``` We want to detect the cohorts `{A,B,X}` and `{C, D}` with the following chunks. ``` -[A, B, X]: [0, 1, 2, 3] +[A, B, X]: [0, 1, 2, 3, 4] [C, D]: [5, 6, 7, 8] ``` @@ -101,7 +101,7 @@ Importantly, we do _not_ want to be dependent on detecting exact patterns, and p ## The solution -After a fun exploration involving such fun ideas as [locality-sensitive hashing](http://ekzhu.com/datasketch/lshensemble.html), and [all-pair set similarity search](https://www.cse.unsw.edu.au/~lxue/WWW08.pdf), I settled on the following algorithm. +After a fun exploration involving such fun ideas as [locality-sensitive hashing](http://ekzhu.com/datasketch/lshensemble.html), and [all-pairs set similarity search](https://www.cse.unsw.edu.au/~lxue/WWW08.pdf), I settled on the following algorithm. I use set _containment_, or a "normalized intersection", to determine the similarity between the sets of chunks occupied by two different groups (`Q` and `X`). @@ -121,11 +121,11 @@ The steps are as follows: 1. Now we can quickly determine a number of special cases and exit early: 1. Use `"blockwise"` when every group is contained to one block each. 1. Use `"cohorts"` when - 1. every chunk only has a single group, but that group might extend across multiple chunks; and - 1. existing cohorts don't overlap at all. -1. [and more](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L408-L426) + 1. every chunk only has a single group, but that group might extend across multiple chunks; and + 1. existing cohorts don't overlap at all. + 1. [and more](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L408-L426) -If we reach here, then we want to merge together any detected cohorts that substantially overlap with each other. +If we haven't exited yet, then we want to merge together any detected cohorts that substantially overlap with each other using the containment metric. 1. For that we first quickly compute containment for all groups `i` against all other groups `j` as `C = S.T @ S / number_chunks_per_group`. 1. To choose between `"map-reduce"` and `"cohorts"`, we need a summary measure of the degree to which the labels overlap with @@ -136,25 +136,21 @@ If we reach here, then we want to merge together any detected cohorts that subst For more detail [see the docs](https://flox.readthedocs.io/en/latest/implementation.html#heuristics) or [the code](https://github.com/xarray-contrib/flox/blob/e6159a657c55fa4aeb31bcbcecb341a4849da9fe/flox/core.py#L336). Suggestions and improvements are very welcome! -Here is containment `C[i, j]` for a range of chunk sizes from 1 to 12, for an input array with 12 monthly mean time steps, -for computing `groupby("time.month")` of a monthly mean dataset. -These are colored so that light yellow is $C=0$, and dark purple is $C=1$. -The title on each image is (chunk size, sparsity). +Here is containment `C[i, j]` for a range of chunk sizes from 1 to 12 for computing `groupby("time.month")` of a monthly mean dataset. +The images only show 12 time steps. +These are colored so that light yellow is C=0, and dark purple is C=1. `C[i,j] = 1` when the chunks occupied by group `i` perfectly overlaps with those occupied by group `j` (so the diagonal elements are always 1). +The title on each image is `(chunk size, sparsity)`. When the chunksize _is_ a divisor of the period 12, $C$ is a [block diagonal](https://en.wikipedia.org/wiki/Block_matrix) matrix. When the chunksize _is not_ a divisor of the period 12, $C$ is much less sparse in comparison. ![flox sparsity image](https://flox.readthedocs.io/en/latest/_images/containment.png) -Given the above `C`, flox will choose: - -1. `"blockwise"` for chunk size 1, -2. `"cohorts"` for (2, 3, 4, 6, 12), -3. and `"map-reduce"` for the rest. +Given the above `C`, flox will choose `"cohorts"` for chunk sizes (1, 2, 3, 4, 6, 12), and `"map-reduce"` for the rest. Cool, isn't it?! -Importantly this inference is fast — [400ms for the US county](https://flox.readthedocs.io/en/latest/implementation.html#example-spatial-grouping) GroupBy problem in our [previous post](https://xarray.dev/blog/flox)! +Importantly this inference is fast — [400ms for the US county](https://flox.readthedocs.io/en/latest/implementation.html#example-spatial-grouping) GroupBy problem in our [previous post](https://xarray.dev/blog/flox) where the group labels are a 2GB 2D array! But we have not tried with bigger problems (example: GroupBy(100,000 watersheds) in the US). ## What's next? From 53e1c3ae408b577e7fda4d6e69ab12bdf4e608af Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Tue, 30 Jul 2024 22:15:37 -0600 Subject: [PATCH 12/22] more edits --- src/posts/flox-smart/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index a5bb9434..fa886baa 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -137,16 +137,16 @@ For more detail [see the docs](https://flox.readthedocs.io/en/latest/implementat Suggestions and improvements are very welcome! Here is containment `C[i, j]` for a range of chunk sizes from 1 to 12 for computing `groupby("time.month")` of a monthly mean dataset. -The images only show 12 time steps. -These are colored so that light yellow is C=0, and dark purple is C=1. +These panels are colored so that light yellow is `C=0`, and dark purple is `C=1`. `C[i,j] = 1` when the chunks occupied by group `i` perfectly overlaps with those occupied by group `j` (so the diagonal elements are always 1). +Since there are 12 groups, `C` is a 12x12 matrix. The title on each image is `(chunk size, sparsity)`. -When the chunksize _is_ a divisor of the period 12, $C$ is a [block diagonal](https://en.wikipedia.org/wiki/Block_matrix) matrix. -When the chunksize _is not_ a divisor of the period 12, $C$ is much less sparse in comparison. +When the chunksize _is_ a divisor of the period 12, `C` is a [block diagonal](https://en.wikipedia.org/wiki/Block_matrix) matrix. +When the chunksize _is not_ a divisor of the period 12, `C` is much less sparse in comparison. ![flox sparsity image](https://flox.readthedocs.io/en/latest/_images/containment.png) -Given the above `C`, flox will choose `"cohorts"` for chunk sizes (1, 2, 3, 4, 6, 12), and `"map-reduce"` for the rest. +Given the above `C`, flox will choose `"cohorts"` for chunk sizes (1, 2, 3, 4, 6), and `"map-reduce"` for the rest. Cool, isn't it?! From ff8ccff80f3ca801ad3e635fe295a27f5883e0d5 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Tue, 30 Jul 2024 22:21:13 -0600 Subject: [PATCH 13/22] tweak --- src/posts/flox-smart/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index fa886baa..c339deba 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -142,10 +142,10 @@ These panels are colored so that light yellow is `C=0`, and dark purple is `C=1` are always 1). Since there are 12 groups, `C` is a 12x12 matrix. The title on each image is `(chunk size, sparsity)`. -When the chunksize _is_ a divisor of the period 12, `C` is a [block diagonal](https://en.wikipedia.org/wiki/Block_matrix) matrix. -When the chunksize _is not_ a divisor of the period 12, `C` is much less sparse in comparison. ![flox sparsity image](https://flox.readthedocs.io/en/latest/_images/containment.png) +When the chunksize _is_ a divisor of the period 12, `C` is a [block diagonal](https://en.wikipedia.org/wiki/Block_matrix) matrix. +When the chunksize _is not_ a divisor of the period 12, `C` is much less sparse in comparison. Given the above `C`, flox will choose `"cohorts"` for chunk sizes (1, 2, 3, 4, 6), and `"map-reduce"` for the rest. Cool, isn't it?! From 1c19f7fd486b67ffe120f73e799bcb07a4e068a4 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Thu, 1 Aug 2024 09:57:02 -0600 Subject: [PATCH 14/22] Update --- src/posts/flox-smart/index.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index c339deba..379772d3 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -150,8 +150,7 @@ Given the above `C`, flox will choose `"cohorts"` for chunk sizes (1, 2, 3, 4, 6 Cool, isn't it?! -Importantly this inference is fast — [400ms for the US county](https://flox.readthedocs.io/en/latest/implementation.html#example-spatial-grouping) GroupBy problem in our [previous post](https://xarray.dev/blog/flox) where the group labels are a 2GB 2D array! -But we have not tried with bigger problems (example: GroupBy(100,000 watersheds) in the US). +Importantly this inference is fast — [~250ms for the US county](https://flox.readthedocs.io/en/latest/implementation.html#example-spatial-grouping) GroupBy problem in our [previous post](https://xarray.dev/blog/flox) where approximately 3000 groups are distributed over 2500 chunks; and ~1.25s for grouping by US watersheds ~87000 groups across 640 chunks. ## What's next? From 5da929515255d1bcad5e909cde88a251c1f4205f Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Fri, 2 Aug 2024 21:21:19 -0600 Subject: [PATCH 15/22] Add demo. --- src/posts/flox-smart/index.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index 379772d3..421edd9a 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -61,7 +61,7 @@ For example, with a chunk size of 4, monthly mean input data for the "cohort" Ja Here is a schematic illustration where each month is represented by a different shade of red and a single chunk contains 4 months: ![monthly cohorts](https://flox.readthedocs.io/en/latest/_images/cohorts-month-chunk4.png) This means that we can run the tree reduction for each cohort (three cohorts in total: `JFMA | MJJA | SOND`) independently and expose more parallelism. -Doing so can significantly reduce compute times and in particular memory required for the computation. +Doing so can significantly reduce memory required for the computation. Finally, if there isn't much separation of groups into cohorts, like when groups are randomly distributed across chunks, then it's hard to do better than the standard `method="map-reduce"`. @@ -72,6 +72,18 @@ Worse, they are hard to explain conceptually! I've tried! ([example 1](https://d What we need is to choose the appropriate strategy automatically. +## Demo + +Here's a quick demo of computing monthly mean climatologies with the National Water Model. + +For this input dataset, chunked so that approximately a month of data is in a single chunk, + + +we run ``` mean_mapreduce = ds.groupby("time.month").mean(method="map-reduce") mean_cohorts += ds.groupby("time.month").mean() # this is auto-detected! ``` Using the algorithm +described below, flox will **automatically** set `method="cohorts"` for this dataset +unless specified, yielding a 5X decrease in memory need, and 2X longer in time ![](/posts/flox-smart/mem.png) + ## Problem statement Fundamentally, we know: From ad8caea930eec317b3a5bd39f7ab825bf0b09825 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 3 Aug 2024 03:21:54 +0000 Subject: [PATCH 16/22] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/posts/flox-smart/index.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index 421edd9a..9c1bc16f 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -79,10 +79,11 @@ Here's a quick demo of computing monthly mean climatologies with the National Wa For this input dataset, chunked so that approximately a month of data is in a single chunk, -we run ``` mean_mapreduce = ds.groupby("time.month").mean(method="map-reduce") mean_cohorts -= ds.groupby("time.month").mean() # this is auto-detected! ``` Using the algorithm -described below, flox will **automatically** set `method="cohorts"` for this dataset -unless specified, yielding a 5X decrease in memory need, and 2X longer in time ![](/posts/flox-smart/mem.png) +we run ``` mean_mapreduce = ds.groupby("time.month").mean(method="map-reduce") +mean_cohorts = ds.groupby("time.month").mean() # this is auto-detected! ``` +Using the algorithm described below, flox will **automatically** set +`method="cohorts"` for this dataset unless specified, yielding a 5X decrease in +memory need, and 2X longer in time ![](/posts/flox-smart/mem.png) ## Problem statement From 2203a345b1d27694018365327461e4931d587f7c Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Fri, 2 Aug 2024 21:27:47 -0600 Subject: [PATCH 17/22] Fix --- src/posts/flox-smart/index.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index 9c1bc16f..7074dcae 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -79,11 +79,19 @@ Here's a quick demo of computing monthly mean climatologies with the National Wa For this input dataset, chunked so that approximately a month of data is in a single chunk, -we run ``` mean_mapreduce = ds.groupby("time.month").mean(method="map-reduce") -mean_cohorts = ds.groupby("time.month").mean() # this is auto-detected! ``` + +we run + +```python +mean_mapreduce = ds.groupby("time.month").mean(method="map-reduce") +mean_cohorts = ds.groupby("time.month").mean() # this is auto-detected! +``` + Using the algorithm described below, flox will **automatically** set `method="cohorts"` for this dataset unless specified, yielding a 5X decrease in -memory need, and 2X longer in time ![](/posts/flox-smart/mem.png) +memory need, and 2X longer in time + +Memory usage ## Problem statement From ebbd00797b2691307e298e65dd5eba9a3a3ce160 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Fri, 2 Aug 2024 21:30:20 -0600 Subject: [PATCH 18/22] Add assets --- public/posts/flox-smart/dataset-repr.html | 1 + public/posts/flox-smart/mem.png | Bin 0 -> 124001 bytes 2 files changed, 1 insertion(+) create mode 100644 public/posts/flox-smart/dataset-repr.html create mode 100644 public/posts/flox-smart/mem.png diff --git a/public/posts/flox-smart/dataset-repr.html b/public/posts/flox-smart/dataset-repr.html new file mode 100644 index 00000000..26984fa4 --- /dev/null +++ b/public/posts/flox-smart/dataset-repr.html @@ -0,0 +1 @@ +
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
<xarray.DataArray 'zwattablrt' (time: 14608, y: 15360, x: 18432)> Size: 33TB\ndask.array<getitem, shape=(14608, 15360, 18432), dtype=float64, chunksize=(224, 350, 350), chunktype=numpy.ndarray>\nCoordinates: (3)\nAttributes: (4)
xarray.DataArray
\'zwattablrt\'
  • time: 14608
  • y: 15360
  • x: 18432
  • dask.array<chunksize=(25, 350, 350), meta=np.ndarray>
    \n \n \n \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    Array Chunk
    Bytes 30.09 TiB 209.35 MiB
    Shape (14608, 15360, 18432) (224, 350, 350)
    Dask graph 156244 chunks in 3 graph layers
    Data type float64 numpy.ndarray
    \n
    \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 18432\n 15360\n 14608\n\n
    • time
      (time)
      datetime64[ns]
      2001-01-01 ... 2005-12-31T21:00:00
      long_name :
      valid output time
      standard_name :
      time
      valid_max :
      4862880
      valid_min :
      4777980
      array(['2001-01-01T00:00:00.000000000', '2001-01-01T03:00:00.000000000',\n       '2001-01-01T06:00:00.000000000', ..., '2005-12-31T15:00:00.000000000',\n       '2005-12-31T18:00:00.000000000', '2005-12-31T21:00:00.000000000'],\n      dtype='datetime64[ns]')
    • x
      (x)
      float64
      -2.304e+06 -2.304e+06 ... 2.304e+06
      _CoordinateAxisType :
      GeoX
      long_name :
      x coordinate of projection
      resolution :
      250.0
      standard_name :
      projection_x_coordinate
      units :
      m
      array([-2303875., -2303625., -2303375., ...,  2303375.,  2303625.,  2303875.])
    • y
      (y)
      float64
      -1.92e+06 -1.92e+06 ... 1.92e+06
      _CoordinateAxisType :
      GeoY
      long_name :
      y coordinate of projection
      resolution :
      250.0
      standard_name :
      projection_y_coordinate
      units :
      m
      array([-1919875., -1919625., -1919375., ...,  1919375.,  1919625.,  1919875.])
    • time
      PandasIndex
      PandasIndex(DatetimeIndex(['2001-01-01 00:00:00', '2001-01-01 03:00:00',\n               '2001-01-01 06:00:00', '2001-01-01 09:00:00',\n               '2001-01-01 12:00:00', '2001-01-01 15:00:00',\n               '2001-01-01 18:00:00', '2001-01-01 21:00:00',\n               '2001-01-02 00:00:00', '2001-01-02 03:00:00',\n               ...\n               '2005-12-30 18:00:00', '2005-12-30 21:00:00',\n               '2005-12-31 00:00:00', '2005-12-31 03:00:00',\n               '2005-12-31 06:00:00', '2005-12-31 09:00:00',\n               '2005-12-31 12:00:00', '2005-12-31 15:00:00',\n               '2005-12-31 18:00:00', '2005-12-31 21:00:00'],\n              dtype='datetime64[ns]', name='time', length=14608, freq=None))
    • x
      PandasIndex
      PandasIndex(Index([-2303875.0, -2303625.0, -2303375.0, -2303125.0, -2302875.0, -2302625.0,\n       -2302375.0, -2302125.0, -2301875.0, -2301625.0,\n       ...\n        2301625.0,  2301875.0,  2302125.0,  2302375.0,  2302625.0,  2302875.0,\n        2303125.0,  2303375.0,  2303625.0,  2303875.0],\n      dtype='float64', name='x', length=18432))
    • y
      PandasIndex
      PandasIndex(Index([-1919875.0, -1919625.0, -1919375.0, -1919125.0, -1918875.0, -1918625.0,\n       -1918375.0, -1918125.0, -1917875.0, -1917625.0,\n       ...\n        1917625.0,  1917875.0,  1918125.0,  1918375.0,  1918625.0,  1918875.0,\n        1919125.0,  1919375.0,  1919625.0,  1919875.0],\n      dtype='float64', name='y', length=15360))
  • esri_pe_string :
    PROJCS["Lambert_Conformal_Conic",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6370000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["false_easting",0.0],PARAMETER["false_northing",0.0],PARAMETER["central_meridian",-97.0],PARAMETER["standard_parallel_1",30.0],PARAMETER["standard_parallel_2",60.0],PARAMETER["latitude_of_origin",40.0],UNIT["Meter",1.0]];-35691800 -29075200 10000;-100000 10000;-100000 10000;0.001;0.001;0.001;IsHighPrecision
    grid_mapping :
    crs
    long_name :
    depth to saturation, rounded to highest saturated layer
    units :
    m
diff --git a/public/posts/flox-smart/mem.png b/public/posts/flox-smart/mem.png new file mode 100644 index 0000000000000000000000000000000000000000..dddbcc5a19bc6b927487d9b9f19a0292d7dc206b GIT binary patch literal 124001 zcmc$`WmHyM*e?8lg@klBQqrKbbf^dt(jcuM-5{-iG>AxdNed_~rL=&664I%3NlKo3 zx%Ym@`~CQSo^cpDbm$Xn%{lM5;$9&t5ANV#QedJ`D4ctDWz|rqin}BtN2pZ}htcF?e*(0~m9v zyDB!L66hb^EQsm4-BhXX_B(ASZM191>`9;aF~%*5h|9A7{RqfftfPYe`}q=jkCWlw zpZCIwmiYhvME4r2h5h#;>uWK(|GnMJDPi!xH!vi(d(%At7~lrAB|2 zkFI}yKMn{A(i6r0_l7N4TNF6oTQxQ|j&C z_sjF2+~DAleemF#qmz@Wwl+qkuFd+Z;LgwhY5E+s8!4%&vvYIk1?raTuTcN9f#=^W zZrxQvFr3m@#QxVvKz`#HZ42&`p_5V3(elK32rv}7TR|`%|Owh%26&plI$qwfZ zSkT3HN5{qn-ie|?L-F0bIlI1&lc@NlvgQYC+CK~VDmpsTdu?&?iiCs&Y${KtoGc#3 zMSFYu{xe(FxU@9ew*3D&s;Fnro{e?T(9jHH1q54Gyl$dZIGZZF{NIViV2i~>(UF9W z%7g_g5`@T(P2;yU2^I(buY;?tG#c0Q|2^&2cO4!1s_dpCaV1XhAkH|vyu9e}FyI%D z?L-Y`Nost2P(o$}Z-KFPD_v0iB)Z=zO{(BU&#uVV3cRHS(ooQ6<2hsWj*VNST zO%hU4hM`@!JoBqJS!Bd+qUJfJpsmrL-#-se52oP=8oQ9?GF z@SR%+2OS5~zELqO%5$4d=j~<2Ehv<#sw$a)HQAu0OIwr9zxP*2oG|#Fp4R7(zRG6& zWlj#`#78&W`*9ovTS>4%ge(sN6mma%ZZ=%u=H?FD&?_@SgLOtjB}n*+$8kLh%}evZ zd{pQB30@H-=D9D)L2{j&8~3L9*IRWj)e2g7m%nFf7R~ayCM6O48k3DDBxV za_g~*s}J)YTtZQady!cU7Z+?D-2W$Ys2j|;N3cKarYY1_v>bgEC2>Y};mWn*L7U)d z?*r#IgrRMpm)P z!zaEsyt@2M+x1W&jwZ70G~CN7NCxgqBj6sVsDR6g`ogbYCc8@mOOqd~+YYFO9c7Pe z%=^-q7Xx3u{5(2JjFSr@79RSZY+rHRn7FE}tjwWZmZ5lH(B$*zxaQf;FXqLNHk0+Z z&#w2?!J($@uE~Qp4wFy?!v^6EK+4!NQjJi)ilrETp|R$2xzIf?Zx7J~>ti zj(`49ZeE^Ma<%WDpYdBeJM7<2x3{-ZD06djcX#)MR7xVEfcx=W^pI>EYpM7Wu~DyH zy+TF2T?%|`WMouewIorU8%k*YmXVn`?x`4jr)Qp;)z+WL)gO+t;~hT2VKyU z<|rgjkEJO3qU*|dtvj+c^LaJlS;8Q>%OrIP9yvsnMpe@GihtqI+USRENQchL-!8!c z<=8nL9UVoXNJ-<>7D?1sO)Mysj*d=(s2dkV z^952;(!=B9>kJI&9Z|F+wcNtObi|dU0u~Kl8%GX54-#q}3yaib)ioo~HWPLG_KF%l9Memc*3uRz_TEtD8?iKL_? z%8ZX3QeuDh9b69G3Jgd*x#F9ZRwF#FYuXntUHbIt6PlEil>2gSy#3Mcvf8GY`&P!j zx%1YH)CZ@q#okoWk+pgxR4YdeWbWR@fch{qH}?XvoN4DPdhG@e{`c?SD^4Z9dgbRf z?M+H8;_R1~$3jI#rPAc%joj9iYgDXz$K{ub2jAZe!liA8z@R4y+lHXA@_iO3x6O@y zpQ4*o>j|2q&)K|u36pQ)o2tkHez^Gjqe;at0yVDdQY2|sq(*@j*j=%fALem?2&DyE z<{uuq@2-!NR@+W~GwAN^ZJYKzkAQq*v_4k(Z~6-e4#t>h@--BNM1|{nx<~4|ITevA z>NZ!9m-bCZl#A=@($gK3{pOSylHpcIN;}v~>tARTX-aVjq_f>sR_?&!t~av(a$4{( z&mMXbn~#)QS|jhz$im0!T-XhK{yc`rO-ex$|6-cwwUKv^zSo{D4P2)ZcD#5elIjyA zs$gnSS2`h~A4?QSB(_IVhkgDmy*m)?_t}0Pm&^M2h%+lD_`$|d zgiqE#BNVioY8@`o+a9<>ORf}NqFs(|SHJ!8ljjoLcWXz7>FLp40*^7e&)J_vwe$0L zUDkq*Y&UE5Bk#p9OJxtt^a@VPj#t@qS4R5#UqCIL1leu~hY5>_bM0{(w7hmvEHMuG zR>jWD%=}q9obBDR(sRadFrr>zFMYDEf z=jiF~>Ig2UUR3~;-f!Q&*{=?Bav0Q;X_XqZCGlJJ*EpDZooshJF-^Vwj1Nib(bw;o ztovWW>po$GoioVw3LL&T8jrKcOcXE!&adU_NgV_ZSX2VCTK&&|FW2yS~fw~=RQ zP#=+Otil%is>{rMwWJyvNVG)7mq^_V<8EwzbK_zE`^VjwzRJ0(MMGq_-FfymCb3W$ z*RHh>7CgkKpul8dVS&6hcep*T-Q?3SaIE!CKV-zf69?5_=VGOpcAI>CygCS$bZ&00 z%%lx-ZK9TtU9;Hl<3~|Q4#{liX@!_Ex~>bbt{uI}g7`#4>Xsqd!fm6j_p8vM`-z`; zqRnS&I41ITxJ>rxX&n+N*06t1R&_2Zu*;h0KTli_^82$MB5Ouosq4R6|4m}%9p~-T z96ZeK#+KY-F8vxmnV@T#P;AGnGBYzRhKtEBW0U!VHan5(Gx1Fr3aaz2#GF)P{RquVY`w3QLYo(}^fsc=1+G_{rY$yGk zjL};`#QW%0A{6!|SIUMiXKt)5P`y3T~O@W3@ zsz6-< zcDVapIr>e`I69rUI1Pl@Wt0&dI_*ZU+6PRU$NTHN)<1YoHhs@qNDaN7%Y~5`|6b^V z71JU1)za{X0{(kQ%McB9w7(t(yGoh*Fh%kUBqLhi6EqZ@-0wFGaj>ylyJA?Plas^3 z!?8c~&V{k(dU<=hoL%Qgv}P+w^z5=MdaX1MxFr9Gyl8ODbsH_|Ppy%xHr~l3RrrL4 z%Yp*&EvDbr&jNE9E42&c)Qy*)1uh+qidzM#+I(%CCY|DX|BXenzbEmg3ju!{)Y5(^ zC=(5yq&IHdIE0=s!j_2&qH)US*oKIRXr?pzy2w3FC{3vbZATZ;(U5|4aDJlZEh8!EH(C-1OUdi==O-y-a@r!T(suK7 zZ_V22yZpv#-H}9gJ9?Ft#F{0#k6mpoE!hmbw&hTga0Xmn>q4e!g|mx73EECb!ZC<= zm#NN%Pf3Y|vKYt;{F)FJhV|mb3p`rdC}`9ZB61gM&P0&Dso{V=-pb3|Atg0XU!_*a9Jjjrh^mH&^mAPZA$|mfi+om)f zo>6NszWkz)hzNs_5E)?Mb~qco;_=d%&2W69Q&UU64^9GX>+0&Nao^4w%^ChtZc0x? zA>qcw!-IEvd;qZ~Y7Z4SU!5&jmf^#8!u41MUav#@n0dWw+e;{@^07&hs{`3re)XkC zUBRV+vumJttK4pSo^c)0j?$Eb^O6cQVszK9XJb!Gjq2CfOO12e%(aF*o+?p4*&(}S z@#?`it+z=z8Pcl5<~qRt{k~%TSkY27(Ped5>G-feQ-(Q4*ZgbBfToYj`qnCJe~kKV59NC7V$#%mlb(nijvj4K8i#^f zd$%{Azu!ZTRzW4o2E@5M;>|TD#Gvy_PsYARfd93_+-Rf9Dwi9(S&msg@??AeuBIiv zs?uZIW3BBCGFn<%cMp#^k?X_2n}oc)yeL0FfZ7v341BS&IgwLmaqF#N z013cJ`i-fEu**0UWK>bQ#ZbqffZTcVgc&)l5RDy6H$tPMqsKa!?i+^Tkn_oUzLqgF zV>~;aKBwsE>hAt7&}23GKDT#chlzoqkW*2^lK7Z^6a*JN&YQvV2 zAUQFChfWK3d!OlhyYPx%uu@KxIBZLK>%&!pm!5fgYY#>DJR1KYnQUBn#p~WC;GC6o(hCbCaDe(g6-xF)z;3ytmrNXmpx* z@uG)_Nq5D&E&DeaD!DIXD)LQMW_rzXev)`AY%Z?&opGKztV?Oewo(lD6ZW}bK=!#Y zL^09Vc}EQQ4iVeXtI!C$^n#E``8<=|FERb+DZi^@+#D=i?S$@rX=(_{=YRq!bnIh@ zWL5ZUu5#h*l-G`ujkFcCx$b*IS_6<05C8muepyN{2Wf7h3yasqGcL~0WW0~b#-TAb z+%|X7AX`4-i}RQX{814VHqW_!%qCndqD`QDk0~Y*KyYioRYH!s(uI48RWI*xQaS>( zv$;W^k^CtlBxIl<9Np+v_amJreQ6O8gtO59CEPT>W@2K(V>!qQ>0}N->>+d^8R~4a zOH08}j>sR$FhtKBZ#H#gNcq14rsmzFk8{8{+yPYm?fds~>rp<=|V zKb^cYJiBlu1n&|izrLA?yYPK_Jk*)(wSmQl1s^piQ zblT`E_q+FX92Y8hfV|4fwa<; z9o`I*ne!NJM7? z2%<(3jPpB<$7Q;)Ny^GzgbuRYd0CC)QJuPZWO6bka#gptTM3y*pr$wXNt}l- zf6tqrZ3!C7zH=X%st&+T?1TERpl@Rf%EA^a$ck~Qi0Xdbe`I8I-&)w0Hhwd{QKNrc zCv;hvpTG9>oy>*#aZOAjx#>HR`UOh5liqKF9y-W5D9EC-D(>Ps#fA2>x8jO&u~?R_ z*A*LS~$>YGe6@E+pS6)G~Zc^LRfHmBxv|K zxqZ)6v7*Dr>@R=Lax$SP*jb`*FY%HPK`Q#=kdDe zc=zjT({H8b_SXyYx3_0l(D9}^u^y=5*9q)BPcK?dj|x)^=Y2$Bw0Cu0Oka^VwjbSZ zLOS+=bT@%#sYF0&^q06d*23bWJ~-4A?hHTrE`8 zm!4%jk0-3VwcYNS%uQLcb>!oFOS5V0>f{S=>?<)r$^&a3Xl7i5dzXset&irV$NUn}DGA8QpO&?iy^pP=8UzZ<=~vGuD7|dE^$=JB`Mc1hz875F%$?7D%o1Jd zo>Ffg7rNDv!}VBPwJa-AHqU4`^kME-&w_{EYfWc(xE~gBzgEgNk(`aOUC&fOUCG4Q zYe+4#dV*_4%sRtH82{(tqTunx`Ti2332(Co`5Ly$%lC9HF?R%Ua23|L#f6r6%e&qB z?I4g4qh~^C_LQsLe8$A<@>$(s^8!`nd6U+1lW=0TBpUW@5&O!hg-8t!zIaIy+cAm68Np+MzwF> zzTFQ+M!(MaYLRBiX9ydYDnoS0MnG*ebn!!bj1&g)n@{NI>CsHv!#_c5Y+SJ!t6L(k zrbd8{j$Sc>ydaicOB%?dFK=#G4CdnlP*)P4{+cR^Pex|3KiH8J{+CYAqA*!6@D#bq znUT-76!ra}pSl0N&%Jm;J|GfT@h~$>zB;@L-m+d5A)}!%8=weD{6oT2fy$7h*77>h zXP>y&+ZKm)P<|+BU2p&^+n!eKVKh`OG@;yg#{pke#?HK+%wT%K+mov zwMeXO@=k8m^_-(>^mSER`l-_$$J$}8;U693)en^p?v|_DW@0vwQpt|Iox+n8e3mz@ z;%gm$`7k$}*y4!hCkfMaZWgmSxYUf3YU$n%jZmml*ZaSp+_REZ-+AWgi7;@Gk(=RG z5kPMQpd;U~N&Iz8O!?FA%(C+G2!;gmR#G9#=KrO(lf4w>lD}Rv;@ajSkdeU<9QggMa`D0CUrSG)FdO{=EKHm+r!h$d0#j z5UCN7r%u<&r?}K^57qBxcM7IA*$wQV$%z#)GSI&`eWW@v>26qLVz+-)KG|bqiF^(# zU)_N{D}UTg z0(eimV(MG&eO^!q5JnCl4nNuESY^@Z%iUN`Iyw~6vI1@407Wk4_A>$&Wr}l845B^X z;gN!eEX4*56d+B=NJ*hV;R*s){b>i_Wn{ys#5@MA)vRFCepFhKR#}g}fR83;?9;8b zjZjJ!SXS3sCd3T<@%}LuLJGp#&mqm8u+!Vbbia3SP(KX};3I^UrY4DIvG#M2juO1M z%*|U?jPySJ)xT76R4uZudUmZsX#VgOBYzesr#EmBFQdHl=268~$JoQ|CnFLxJDp}~ z_ur`-Pgk0?zFjan-wV1t-+S_CMlEYPrpW)|^_Ca?Y%|+com0K1kVvoV*(ImQGBy`F z%<_9AC#$eZcB5JZg_*oXa`>4KtizoS_$uzy32wQ{fAp<>*(i~5$wOdA&N7l}(%*Y~ zCsW(zbrEC8UB6M~pqWkfdqTe4*%Q2;AMetWT;f`WoA=sX}=w$sl~t^kqo z8T!ZGc6uVra))_&4xRTG0owsLO@Yb)%9Tvmk@3mbl&dUx--?VjF$yKE7j= zDj9BW(ZOU1!GI2gVjW*&ykLl8ttKUS{6;NC!TbxO^Q?#E=o8eltehSn;-j^KrDG}X zUz-$2Lfy z)&?|bm8+0?3*=)H$Ve!^ni`>7)<62|(4sYB7Z2n#>d&9#B5np%9D1$9cZ0f)tRy>U zjjEY@P74YEL7J!MB~E&jWilh$(pQR$D~<_j8sIwkKgyp zT91%ajUCycMt5M_!0(}|$3Shl#$~xVNn~H;L|Lq@hL7KPIiw5Wz{AIpuXwK{o3~(T zZ17HUK#?VH*C>3`1(yk`{@U{DuFYtW5{&+)#r$@j%2Snh>hlK=55Ck-h0RKd=n=T- zKWL5Y4tcCA!$y#0^*!mMO<5HlMrf5pT-Bv-1br2S{s6Vm!*mF*X4f3On_O@yAviy)8yYd@3z%7qgj*sIxK%&uA#A&0gbAaAvgeCacLNX zF9hS04;RK3&$L!=ikMam&*NU5)S7m&Q9SAAC`ioMPYspFr^El(#j>gwD(Y*+*DfFS z@9*{3rHP_;ysH$S)x}CooUJFf5pG#`kDtomE&L29!sWvs?#IHnSy{Q|d2X+Azh{j! zydp)Kb;y!coq|<^0s#2jDW_IAv$({BWnI#y*~C2Ohjg5$5n3XGtXdOI>2>C>EW&R4 z+&Okv8hk{RFobpO^~(BpkUIHE|2kL91mCdn+luu_LG~w2#E9_Lrz65FrjCo7kj>Rh zlMbnuo(vda@z*m}jDM+8I9TH>@$h3R9;?VRZfJ@O`&IcsB=1OrDOT4%HJ;FcZv#KPvd`m<>4}oJmu};y%0|x6 zB)2d*>6pClVmgsF{?`cT>r)>;Zj7=F`lLMAk{h6S;;=&Fh!vrAEh*-W1}awpr#yeH zp=<$j{@&zkN6a_5UqP=u{wHyd21-0=TV8M0L`_l@co5Rc# zK7DFNXi24VOV;O9j=F_N6Uls)HbWQBHWR+OM638EdcVMbc5;noS)&7vL~w8I`oxtB zdUO8IIq{QU`-@Lg@rf)J{PGFD-z%4?7I92ocm61M@y5(NL!j;jMsw07>l?-MzfjR3 zE1l8}iluom7ol6$VIt5uasmQ6oKo-_RJ0GSWU?av*fu_H(S0u)yNaSQBT_$dV#-;Z zePBs*c01iqqHnTvckdEA+vKYu{?Q*LJ*_ zN1WZ>%;d$3l9e#LVRvS4A&GQH$J(E09lD~!^pCSC>L1IC>!*pX7qQC{t6VdEJF)4V zYy}UmbH@yEy(JqrS>9lkO82eiB_RLaI&vx5z?a~QFMAFgo{KL!&Nqbb%DxH>WIjLs z7N1z!T;F78G)_5*-M)LS_a-#()v^Z8dnD!+O#Vjx+KU3g$+$*x!Jks{;yx13a1|;q zd%k0ubyaxRb`ZJ#O_D`QrDsIrC8@||hU?1D({bD8d_rtuBD_<#)6aU@h;FLtB(6pe zLBA{b`aP$?s;ffe!0ORC=a*J#|B|w!A$?g{v*~{qJ%dMemR>8#C#HD70x$V>*uolm zaG-Rs9C`(&y}u#{I!cx%tYyMxgd=ixbl3$6Un2=p*@^`?W|?XfJV{)}+BwWVZ6*v)>&l2xnuTLk}o8gD-MUu~dEKp&e zZr8}I>b&l+J5=?p5mn&8ecdS^5`aFqV}DCTQ{^kCf4hfei6~)|;L*i+E3gU_djEI5 z@A8IO#@`wLEU&?oxT7tj3<)YTE$F)Z%S*hOasgRW+TvVlIlqW>y`ubOgX=b~*}qz{ zl~DXreDYl(B)HS{-@}uslFRFHS{jDSR$rxp;-K2T__Cr@Yqm1jlJdEvAG!C7?b+cX zl3q6_y!q4ToS;*nGSsd5=lmZ9TRbE+#I~~OcY-srhV?hasjudkb#JHdk=pOuim0z- znZ@}KTHbfIo(X{u8enV2fnZyG&@peIOEXA;Q+MUKx#b=vnxB!cR*YV0Fb3K8T>7J` ztq#}&1h0CmnDavTXZa>~DsK#sQT8z}g)g$J|8V9)OQrNISEj~~PW`7@w@eN6w41x@ zY+1W`;QV^#&$Z`=(|#l(c8%s`@wlqBm)wOIGQzv2>9|>dbn6uS7QZ^&vi1ctA~@KZ z=-&(1_kN|Z;pz5uDKZYtHWs{fvGM-00m6L&GvC)oGKR;cQna)iFYkgv;`xs&O~7vF z&&A@9x}bV#;<1r~=4>?zHHi@})E`XZeFM+@24?)LJV5g^R|H!oY(Ju${S)~-p?v@L zwJF5`gFbTzsm_gmwm^XM$XH-X*G=_!Z%?*`t%N(MQmP2$1{8Cc`uKUFWTx~x{i`VZ zxR3~ex6BNyPEN08Lg;W)bB1S^)H`F@1j1Mt-kVBWT>&yqR-MMO@^VvpeUQ&I4VTLX z;hq>ETWTBhNf(Mb(Yvx+uF;>y<=O*CRB;v=hfeKo@!yI3bnb>ddI^(VPS$Lk;rjJ| zEFSiYU#Y>Sqt1nd2tyXz!+iC5e@?BkMO}gg1%8N%gwbm9e-291ISWPDzFfSBGBXK7 z=l6ooeRpJsH8OZ^f7+E-6WBLYe)nej2E?`}h<9*>8c$9W-HYKs@7})j8&jiZhZWb( zt|qvrK2$@~?AHwr1&i7*tqI5a>_Xj#!Zgt(Rx>uYg;QUpY4t|qMe|eNc306eb_Hz+ zu1>RE%N@Dr$F|ImDfJ(MY2v|Gc?+3RwM}mI!t(PY8M6iU{tt=V=x386WY10_yF7;# zmjVR#LXXUayJhjh4#{a$ZTc$2>7z<@)YKPKhhU|yPu;02 z*}g?0nxT=w!Nt%2G7g1&Y?a2iR45gS+B9G&7zp5((O$?$Z5NJfZZtYoCHXF5f{?Br z2bwTtC6yMWvp?ChdwI#zc3EG-nf+3bZEglsk+%o7p|hD%nxR0S780&*BeLn2gm;4; zDT8W7{O(XyDiS|Z_D-EsModkHM4i=HIslt2PW7Ykb2&k@4fJ;%3qL0BJWFWUCU7-W zDr^T5wgX7rtud=odcfSawzl>T4pIQEdCfZU5P%1U2l-7v#gqo_vzIPjzAVig^9i&& zL^q2!^a)8xp$bbkEYUPw{+8?hyNhLZdHE`cs}(lmB0f^keXN3N-UDicWaVx=WPoF=bY@-f%k*z6twA0e zlB1dVdwcJ@+qbd}MX%cQY;SK|$VxgJ$040n6{VXYKAflJ2T98%T^*)s+qbG2UPpBH z^>u()QRcd?>t7C>;2c2QAK-ftKU%tuFbkrZDk^^Q1|C=8|AuQ>I5}~EdI$~;{R}=# zKT!K;LRivxC}nJIxsLW$gM82a+*v&O*&Xiyc3;H1ak!Z73p}j#?ipg*0W$1zS0;$3 za~qQ%wLd(;L0kt2V=JBcXDkU8k{prd-zemcK8r(qlVE`ArSdZV=-bDp(hg7( zuh=rqLvM@SzC+B$E-R<*YFSAEL~;96gC`maB%cHk7dBwhW)~I$z*`G)Iu+Q31Z&*D zDlitH3FOb#{=rKUCv;Zyl95(4Thzf{3BKLm0N~wWZjDup*ErgyS6LsZ~4<~yL z8tM#uKH{51NJ6k<%zo$-Z>fK_gT2vUKZ_2+VgR^>?lKZ6CJW%e)x7-h;pW$Li74)- z69NYZ2ZZ+qv+y<;5E8@Z!5V|C8%WwbR>K_5Yd`S8tO+h8DTF+SHBS-urYLPZVnZ4I z{1S_Sh4o$MI%v%(@b~h9wq*AB@h4C;fHW5IIM~1eFE1+*CgLGL_z&0%g+IO_mVD3U zv&)Mgva52w0k>C1MphaYnEu8L{U8Mizdi9F`510}!Q-Rh&6LLE$kh;?&KUM+J&Plp zr3op{f%501x|eE)Bt#q^T_!=l`7g5;MB1FKh1S&G$OvuwLLiA}r zKNPANMD&VSIb;if6NCtH+0d!7CTCVkx`;wNn!pO=-J~HW4*~D2Rnr-q$?Y%frAs~0 z-9IsKaN2-IompRx0RL-nTU{kDI0nI0bW4^2AN-UdK&h{W=jG*PgC38N0KmrMhQx8BG%1}-hM}<~dBo(%* zvBiSr!9O`UdBB11>)bRclX}~+9mwE-gkyO%3iiN{AYXdHFWH~WP;8n63L5^>a?VWw z&>#Q>`!r5ML>}b*g>=C4{!qlaFq0!c4owcxUO}ly2nY;S8TG7xU z*geoth#do*7ZJ=AC`nc#OF~^#nfta0%1@Tz6DYsf(CF|u%*hrTHqn4A-U2Zg0!M$a zL~ms22ol!KyB25&p9$xV_wg5^+a9|ZK$gfrqO6<;|Ila9ywFgk4f{!mns-}F43Ws3 zSBG&Ruq4h7vju!iNw^KH`7$*~?%j)$PzN(ZP}eh)@`S6Ll zY#xr#fv?;wR59zgO8(u#zD(gC#Ki=1&IMKl$=aG4ZRd3G7K611g#v2tyJjQVO}O@T zG4Mv*65a%zM?iSE-1N@+{CKt9YB=O!wo1i<&7T3r>q-YFbPRm*%)`o-Qxgjb@$vEd4z5+Uv^{hDxoS7Yss)>VRtv>}o(75) zMe4)%n8jHLM+ruZ3n<``LbkT-5ltK%rGkG>%sgvO5w)-|T)}3PvU}QK^&&{ICFm2N z&uKWQ%c_sxO&nyPe3O(^=xuGOm%;n=Y1DDzpX1}?RK2{f^A9EOPv!M>bve5@cYVjy zV4Gy?oa1k(ugCVVNeq?C9-tEwo3vO zf)v!*?v!SUKivO3P_!#dtUl#?$LdSdcwDP-7r9Gps=npudnPbqgxic)8N&e*a$dqS zF*S`&Pmcmp%ovW9c8xtfVq=z&Xj1UDEu{H7x1buUs#A7aCih6doGB}GU>c0t)Dr9~ zW`#wlsjJ0w~Vs|+J!Yu2%X?G=tu?8$`J^GusX9Bo$O z9=mrv3DRx=J$O;&4XUUowD=o1Z?MVvF3P;bMnfTfKEyPSSUNwL_sxMelK?hF0lO)E z8(!6)#>&X}P9b01?x3U78+92*S@q;g9wJFp_q*ceKdg@w@=`E#gXAf7427Iu%$^?67}@w}hE5tr&{Yv+Hz-lNX}RYzXgszP0^=sQ^L!n6#%i6I&H zpZS(~AG?C@Qp@7e`)mJ}Ic>E9;x+Tpr^>RjZ!55Nc|?6yjUVh?lvckC8pHQA{Ti=7 zjtdLg`ACIM(KhkN2bwkE1)7n5F zdIR(e_?|_nps=m=NKf?=?HupRs#9dD_$BnE%UN8Q*Gu|M%+{LwYYyP_8#aOHyd)`B zB9r~KQIsF}V?mT@UnuZ`bb(8AyWd9)d}SyP zRe$1z1^hTXis_7IkA9=$*NBC?9DZP6kB0&l-EcIZa?}LM&q9XSF&FLt_vja0D9e!vR5G@ksix?y% zXhF&Pj2Ic57QdpQ3_RB>)s*dWl0wc)k@A#yL*0@p;z1jL){}$2ZjxyhVyxL&^)qn_ zS=n5N=#YW_@vG=)Mr&o2*0lubwoUChBtsa|nRt3t)}O%lhS2E~buL&?$}5(phKjUg zz`YLrcMY^a@=-K4JS-r?AXW=#WY~m%cci(`U9}#s!a08_i5kPE*$%3V7 zX*&%EQ!U6Mlal7ypbV{t3N^?CZK?dSFss4z`jq{BIJtnec5a*8P}E;o!uDagDZOQ* z2)EnI(3?AtE%;^d-FR(AS&IwGDUC6<&L;rXZ&4@(Qa&KmxD3u->mOxkU}IB)UQ=-Vs6KU2-6OQP)h^yd z_a67^)vIH_!l84+z{aj{gi6alJ^Jyf`&l00zIth$to0*YJmoe*W=RCEje(`3rF$|Nh3e(-E}k zT@>_*M20jm;q*grzAlguCiAPx(z(Mk8`=7|_aZj-uh&ZV0w)_C@ehlEeY>->1HhR| z0sq~u8_n<7@1cN8y-@pYYoTm^Pi$tLqpfI?g8s*JWnBvs1K&MHqUP?=vUtOR<>J>X zxQL$y=P#L&Ge6!?y)}7e5w_Upo5?93a9P6`?vwaBA*Ci*2CxZ%#W2$g7{2BQ@3D+L zktX&LA<}#6X|UAn6CkVpp{w}rzvDkoi*zrnrET=deB|=- zj;y-v(U9(rt3kCIBXrI>KOO>q6kPEe%cZCyhk^b<{dk80Of72A)G8btjIR&sBUVT3lgdLfHCb)iN9QoDdPQh#ltVq?;kZnXyFuC1@j?5u{%zrx}6O z0$lbM-F4coQAa9{?c-7omL>vx)!t@=fRCoGOOK9f4fo=Za2#K&e{%M2hzQQ;&<-%c zPo}dPb<8(%mKiG-6fLC~2@qR%t{O};cQ~6Cy=-bEvisg=w_lLhTGBVP!7cgW02$DO>sSbS#Jj9;xNWh7usM+i18Th$E_cFZ*`+S)c zUGU01jX*_N^=vXFuufhcCs+?rVU_*Ydj;a^!omU_3(FOlHC^#`3ht~6^;{>00n>b~ zQknqi)nSFdkz(eLNmQt|$e6QeI{Y#$_X~5BE}Nj{0OPp+7Kt2p03^KC`1-`kPyD9uCA+sdMucks- zS*EVNqs9RK-PVQ*u%pJ6r|B|Xsu9h|6jZJPDQSTb|C1_%bYt|F5ioBy{&+^+B69I_ z_h=o9r%sp(YXIQLp=3!y{KOW;=Q!I32c`X|Fb63Ob-aQl>CKz8v`DB(vT}09v!4TD z);F!hl?wC_y;z23dc_c){b zGnUI0O2+S=H3a`Ubh6a4_Bg$FGJT)Azi0Z$8xKg%r;Fhm7`!_ld8RvqE;<jGD4 zWyeumh0!N;WE)UCzGq%NX<~Y!!(duKYyn~(yONNl5VQ#7T89x1m?;5t%amxg^!DO_ zS5*f5BNg*~w|B4+G7U&6d}RC%My+_B^pJ%$88T#z^|v*`~g=R4Dd8N+R1nU)roj2vSF?RsHtJiyKU|5 zb6}sk>;xA5#^Vi9lq9q?2rWk01Jo!M47Z_BLiRH#811s+F^2{(I3xrOg$xHFvms#U z=LeRcG72u_5$Klaftb%QCm-gU&3#i|c}*tV2;=4`!7Eo`CT51?`)N-)RGO@$h*I0G zzwBs~si`SWJ0OK%n6W|0;jAd7dLVr2`aGDjz8iUU$8pLp#z88`SzmYg`Gr{a&YgGy zF?@J(0Js_A-q?>bTvC=DlHKYxug z9>G)$Q`=eI6Ccc#VJa7y(XCxlFUh_Wm88!C46@70AaCu1u0@`zYxvP(+77p_fptl$ zR4GnVRjvCZ-Q_e*PgXYPzC-~rF!CC0Ly~YUTWB6>sp_n%`t3y zgX0;l%AkcfJ$>dN|8B?L2tC7l(gEfNi)@)r98gNDawSPp%$I4^+_LX;nniC{SFc}M#HGpd_ELC3>W z2H%=KuGSWE^C1BtVRr=$esm>Kp<+5}92`8?rTy(Wn1|LV5RHVdG`gDb+Ug@w7Zx0p z{mc_gFa4Y);yJC;=TPxg6)mIV^tn2~Ya^V}nd9fsx#Ju0o;48gs&n|Ex&CL;8LSoto z=l(D+P{7e*(d;hC#K#{+L0=uM<3vprIz>cGLK0VJ+x2!QGBWbAmG*m>V&zaBb8Q3KEFdT- z{;3iSRrZ$-@(t5=_YI*HwFg1rx~Y=yEcykJ&6K?EmzFUxymuq?yd^&_=>|5r_Q?Ao zW5_ID$qabqm&UnVGy z=8snK@P}NjvNq;oiCJ*o?J&wPWEHXui5kfuP7BqD&swdnmgi@u2-yp8rM{t|9Dw+( zr{7w$JU_auzV-H6>Zgy{0SJ{nDFQYzVudFWWI}yGhPz?h)!xYoDN6%j*$Ug-94aD(nQb&w)5&ivc72Wpvq{`_eSL?tSetrZgT6NeON#@E!OFJC^jCmJFA5FY6%66=G`378_> zCpXT=R|aY$7jxxW4`4r-nMA?hF#;xGPFxnwV0Xn!b+$HOOi-wQ=WVcmr3g8o!&E5> z1@?PF7>~N_^zs^YVaYX6YtmecOzr`TCGX);x6g|o-QezdDyQF={?wVHK9e+Q#DQM~ z=KN#tG=X&xF+Jro8)v)!9aU*0+J&h)WOHa${I-$o!x3RkLT7mV)6y4l^)S>!((L zOv8gI-^|%2ME0*)-~TcWVt+&?coFdo2zX>98%A%-z|V`4(<27)%;r~~3<%QTZKM+! zJ?tuzXq-S(=0EUP>5Rb+2`)^MEmd0`Oua=Fr4$&W9!}!&sFpY-xbw?Jiie&Z`R(LD z3?QQ&VT-HhhLry(0rAVi68|V%BTL%Qz(Eehqo%fTo`9m-bh=N8C{O#sah!TDq1a}Z zmGv*doSl&C+7C2Z+H}4)+YsQcY+8;W#fDM*B*fRKG?t)gsr4kkJTm?4t+2u7W1Vx@ z%)%OpKBgIoRc;DuEPJ=+qZ^MPt*Q5_f|2iSq5C;h9Ccf;iMD}7AJKQ{!G8>oO|f@$ zl!ktD%43xi8kvH@01}iUJpTh87SRUg-~k{N;R!6wAWp*5aaw@M34oCmjeF9tgKxj| zXp!lQ{xP5hIX<{h=OZ0%j48M-%Qh;uTW*7f>QSZ^wno8T37b7&aVz-VSE(jD+*N&F z-rE>EFDon6)MaJ&ZB7aw3fbRmTl%pT`TWqs{i7vxg`EPxg2M-pP?j$QAY8w}@HbjqZ)6bRI#6e4s_BUsx6lH3xhZ z?XpdL6W}ZV{XWiCKy7z>IQnbFOWYm?2>yPLESoxoe;Pcu1Rr0A_%B=?Vihhz;ZM^_ zSw6`8l<+~(ED+Ftry5MOAWu7b&uqN>5dIs?i@9_Mh z;=d1z%CgKFu(0Q)|Gt#al#DHv_FxFHfyM@^!-@aZV$CimEh~#cQWd^NGJ4>)^6qiv zZbwh!Cp^qc@*VJbPx=wUy!6zO0_M2DFr?=z?JlgP&3I<7S-gQX^$ zIE$Vk>%HZpzR8)f#?`K|4#-iwcG}4+5M-V2{w}vV+5yc^crt7r z)d=5p{`EzJ&HtF1$@-eItQq@Cjc5Y(v?pf>(!W{$h1ROVsf{r&XTiQIvVYv=d1&RK zg>f;enutP_>3-8P4?Zw0>Dab`xYY*yB5~}3CtEMz1po6ate?BTf5$L)a838M_6Chw z7<4Fk_WszH**AbTi8EVN(69OfHsF7HCcVh@c!Ek(w#wNcQrHrgzZN34AoRe(!R(2L z?|)htEN+j;$LPu@U4s?qWdb!GE+5-Mj}-3I`L!-)<)0=jcw_B9Z@lvC23SZFjz=_V zMDD_@)RuFR2yg(oH@S$fx*(lNw9UY@^t%Bf4XY6MBu;$Q%D?8(d@AHI3!2wy&4Ko| zY>HHRc5=9z>Kwi?A!#mNO#=;$KzaYxL5*6;%e$R2l5m?B43!9BSN+R#G&AzDM?HNa z>WX&wlUoUqmqt&|D_jqH0mRMFe;=>VBFM?@Rv7jE|4{bkVL68DyYN$J5}K7Fy+|So zl~PLHLP9f==13H!qBKaQxg;eL4WdD!L5P$_Qi=x66B?z^K+|{Lul3t|AK&jg_Wt(z zV;yUy_vv|`=f1D|y3Xr7&ueHK!Ez$(wiuXyDM&M$rE)f$qy`nIHJX|R+5487a=`av|^%6)y;y%qbV@9#sW z{%#<%daW`u6PIo||Bj7WlHrl~mSGi#lcOUvO%NBCF9Es8+AW&L-n=DlB6$7QOQwKw5;W{AV*g_}KI z;>p($3->E;|6I&eF6mNu#ogI;cu_5`=sA7(CN`-^tB8}z(svQ-Gx*rC!6WmN>bjq6 z=CbJIi5i%1MaX1$S0y@D=%qLn%sL(xW^Bubt&-py|C-C5r6r0UKcvI>MTRrkJF!e{ z`P9-3;DY1*-)F08k^|-KZ|>2zdo@BW{rz-xb@N&7qYuufU+F^%CI9cn_aryOYo}iP zn-CdszYwosihVvazMN$illuYhk1JE1L97RqHJ^DLJ>oPr#)mZbR7)1#GyTwAon)M{ zU!>B0C~Xx9PF5u&H7hr?o?m#2$4ja1R-#GBqs2Uf3pD8Z3mKfR-Lwg7-;Ld6 z;D@`&_0>B4w>UgRX+d?zzTKHzuWiAQt{7*8t>2rTw>K1f+YQok5^hA1FxPB_^RuSw z(<|}vg?!c>vj^x_KN!0{KWA1;>CxKbJIBuWL_&Ox-jDOQiV~$-+^?knjcmT%9sQxp zZ}3D!9}RFm(e3>7Rl021!B&X7KmGgswL>W-dJ7ketxJ!ud%l=w{4F-*JKny2-?z%J zDOlX9)j%}MWCKL;n`ZEGM;!Yz<#+8rm;Ox7bPIuX}+6>V~N8N$3-P{xwXvSsEQ(itgw(xsRK>@4CYMO{g?>asS{bmPP z00aiyogzVtL@1q7#%stmd1@@5I%Yy&=yb9><6PCwH?v3Zl|6p1&%MrgAVOqS>91dB zU_0I6EqFV?!xtF0qGk2w**_3|4R-gVMCUI*G)8_&YCDg=`cz_Q*mK6BH9Y=!=BhH| zsV&-tuW#6VQR?lNn7io@m#sqey?M1?E3nVx7#ru&@Q)zVlT@8VpWn;OoKtcLb6*{fpXMe+idGqzJC z&z4^@7mL>zYgMR@`nRk&z@s(PF8H=-0n0Cy>7m-~C5L+5F6GbTC66FU@U)5*dzP>F|e|xF~YRqgasFO#D3j0t=E%> z`a<`Xl4q?`m1vrpD?YFh0!fM|g6ox<`{?YY=;PVv>E9}F(U2ccMO-1v>#NG@DsdmPn|GCG2QN}o~dpBay zp<_GYHH_!Z;^=%e{^;W+RA;l#hBz7WJfgxff6gV>>bHr84(z#wvq5;@`dqYR6lH&= zb=zPONNTLE%aGi-Pkl40CJWs`(~ILnJK=Sh{0Q2w{Yt;yZ;5&#&dts5!Daq7cm~pf zk=IO8U}x(u(jm#&UC*iA#b?g^aCFb3 z>kES&%*VIG)8VevA;I_D!Jl6vRG+?~y(zWyHbPJT(2i7DRBn<-TiV)Qy=z#)!J!7s z@-gbE%^g$tTc>!9Kou$nlvHzXFK!j)YN^v>4ZjO#oM<<@MXwl z&j4e>0!}dSjx2%Mpfn(BxNus4^0CdKdp_J@PC5OTAES19J@I1%gHwgH@1gWO3~Ji! z^sj>il>hwLoFJvXY644nns|Ytzy_oo;yDTZn_kYFzWrcDNn%d6faLc4gSJiAi1Q^% zd?3v}uV1SSw?6mL2wfI+G8Bq<;>AO8En60Zc6l-0D8(fpaD}*)fpu8|Ly8epm*x;+ z*?hbgSfsd6U;}y96a`XKIXEu4mY})r1pO4;pC#~BG5_}dCLwNeLTw%uv%^EN&Q=y} zE~4^}>ve-w7>b&9=nW~pvdn3(?nOt8 zM*s@-7d_STKTI8K;D)>rUWlMHDUL@M9*vUC<&2 z3tX7`p10^5!}U*Gi=srJxWmhnjmdWXbsSg)MYVfO97}qe4GPGzJ9q9hm(#6GEv`vz zKU-Y9m-!IuUjE%sC+R!W-RxBK8P5|XnhQOt)@-mLgSrI5YZ4d_8okcLtwNC8QI`PL zt0vXX#Pt2g2U0u7<5OL9;kBy4IlMZbQT)4L+)+r5c>(V;QO_K|asbB+(B$LHT@!?Lx)lD<1C!PlkBJLA`sqNUnU5XU^SWvF$8Y{LmE6br%jw?+6GhLp;mDHk|v_2n}MMLS4nEwd#k(T<~r!UiB)7;L)NN1Mw7eL+v_RL50}k0d>=?@m1=A9t(1e9 zv{;sL+No8Rm$O1#J~BRj1)45stO-Kw4x3Eq8Nil?Yte3a{bglmKk=ILB#cOkXwXl$ zKC8Xe5w;gy#pZI*caHZeZr^@NwD(J&ob5)F2RX9uGxUx;xi0>{x>u$(WcYuZ6JB!m zL=-t(5BycmWxOxs9u#~5Pk>uUEYZOC1t+8o&k7zsA;jJgKZLbpKyYv|ITwysEz3F8 zxELm#SUWHwWi&Zqsl`OWRm1G-kBVn_;omJ`NbF+&w%zQ{pFbLn>+BYt8`L-40PIca zT?9x4Pv4GG=UF)i%?h$m(N!3-k3AI?zxT^|6UZme!sn^K%7N9GiPwy?kKQCvJj3>* zGyg|{58xiSOoToHJy(XP;K6i8i!c3ed}UElmxJFfbMu6z=Z?>fr#^!X+^3kFVQwGy zE+~0xvfUvqEiJ2DfrzLz)&iaN6`!6($5=~`TU_8G21;<1YOXuypQLZ)$A&^N?at>t zQ`hFnU+Wr_+_lB)(4NwVyI0akQgR7BPpS~S>r+ljFcA0`S-?8f=%osI4=OQHcyy0i zsr7;B>FMJRCtD`r*_<0bmd7fPY5CSrRgXM`B7RNOwbuTxP`=& zmgebw=Za{1Sh&(6qCU0wey`f*+Yei5|A2}+GHv1IGjYU6&xv?1O+B;PtZ^3xGStdV zn=*Nl(v{ZmDkaNmZ#vSYpQUs0tuy{KFjn(gMI6hDEo|%83(&IcBy(9>HtvvC6z8J$ z&%BGSAaIqzB9Ghq!<64imAp%GsE3p%!p=;0;U%LC7Ak;VmX{mz!v2)e)6=OQ?%1)} z=k|r=!4l1QP$Ejxj{o-TGAzI5`3CA1VhG!9bie2%$bb&Y`@a?zE=Ex@Lv*W=mJEXp zKy`}XQKke zYPTWt~>>tC;R1--s`AO$R_UGe96_Q4|+SoC6Q5(MD* zTEV%6z<5(Vl;Dl#GYT;|LbWbBs12E>OX5@15Xz2g^m0dheyU}aAzenSusU>a- z`?`7uP_lTT0a-B%=c6a?rv*29O>do@dN{mzfnMfwbS#C0ONo2xNpQTD8HWd7eCag< zn?3Ql`0KY1=~dlU;6?w@2Lxr|GcUdIbOvur#DLr?-+o~p@w*PaGmb}(qmt7dF#0pk z8AX8&hc7`0GWcEri383ACaSL~d+nPyZ#Wx-{+nyo?nv<$Q9}O{&u=P#%tI?I_ffA& zC|Et*^~P##AEFYDqiCq05Xy;rg?M>TdKBd72K#FT72&9f=#^u7L#q(IDnb42NCB$N zLXTJ7GRGM{30D}0Z|{YizBlv#c=;<#?)h)z3|%nZp@OdMAuLtPoBucP{-Xa2c>may zy8_(x`hWZ+BQ4upKLX3)rc_h%j&^s*5vb#`YO$grn_pCZmHJ99)#S}H_cLCCLhWzr z`KPq|&;8jwa^S78K3;w4sL}RI?>0yLBi5@Kevo0r1YeJY;A@hO2ty5QdqGGES>r^ z?c}4WrICvfZaJUm06y%WJV21zsM+yd>qs?BXYqAAA|-nc|C8lE|Flzg-+L8&nEv?8%d9nwz-6K=94W^ zh`pZuyI%a@9Zrhm(ZnA%ZWNw(&?z-`^6_|}Ctn0_UtMc(w3-rMs;yy}JzLi&$hfO3 zz!>Umd3mvo1v~am55k*A9flro^gMO7=Hr7}8?D(b=Z9Md*khn|dp|Rn_Etvp#1UBy zQbr5^R@ujB0*D#fGHvsm-iCbySLTtX6L+H&=TH=|G{Wgt+MYO;&O%L={C1+>74WPV0eeuV>V!4}tBqh1&!vb&in@fBViHL4$<;ravLDnAV)=iD zAq+~KYEn)INgn;7^scz8kI(1HnxyTC=Pb`aK>LswW9w8MNB@?98nS|DtrO)6&R-Cf z`Z+RwVRa#E>IBIticbgu@7j6;!RMt9(}=G)zG=p0i+9bnq|U3qCAI?-cGvNWmII*wbsxvH+xR^|cp8UZa!nC?Az z0B5ObtqEu3uSI$Xm958r?^?2C38ku`p+f^J6VI?txy0jzq!mA>2L4B`o;TJ_5% zFh$_##eo$t7|Lo=I2P+B{AxvCe?Z=pe9u$daH8&6pj0~jF?GyD-$Nt;3JTBF2KhRE ze7Bpf65-addwljshHkG&u&dSC?>}2-&pMlJCXFW^mMEj?R`d_4i?&R}TZrmJ+l}97 zEm+(X7i@aFVgRNkg1WM<>F4H-#_c6H*iq{wZm#*^mdJqP$(to6w(!^mKTKkxVP~#U zD4f92or;HlWR&nqFc=~X;w2hAVC(e{jBDPHJ}klT8S8>^+SR7|%}sdC9eN~-%KY-t zyr8FFpj5b*rM8NerjzwEils5^eSfG=w%g8ojnheX@!QpeFLY-VR7nrNy;9Fdp!Dx% zpC#Hgz0p568%kZU64q4kY$NusL_7vdyiTyHvL zM{$&ul=lr>gY5+$6;{;eVD_(+mnS~B zuvw)c<%S%vkGaAi9%QlL*HW88ou^EK2 zYd%#`U0nv9DCf864RhF%QpDvCbegng3vf1AlH1EmHeLCZa|o|HE&lb4c9kyP{Jd7r zlm{?;AyoFK_H996mlZWOE?pK{)`_D;lt477P)gC$C%Y{_zHYmi;f61FxyeOV)}+^2 zB;c(hwA_@osaZ*Q{nXW%n1H%Eeem9jA=ksm2r|dR(HG(OU~1ls_FM@TI4w;C3-vwl zEFm-9N@jdlbuukwIk+zM{by9J2Qbj+G!B#tK<&hjBP4Db7A8ETbp|h5mZ+1LM%Q2S z8&!mMyqN`XKtyni&=k4&K$UwY5!tB(!wtp;QFVBe9+brDPaE-=Itw^qnQRL7Nh$Ed@Q%>< ziAKVey%}DwkRLTH_69Pmm-g>bZ4BdSyVvmMRUQI^6pRVzUnZsJPvsk}+YAnxH-ena z)?1QONa>^bCG^odFT%J4((2mqiY3>A^pPPAI-pz3%f-~`sj;JAZteYBNn*4#SAb-L zI3yTXBBit%t zP;C&{f|jP4>0;-*<@`r({t33fv8r{gd}?$?b5;31?CiR2M8e8KmcQPBzm=7yzalkG`8c~_m$jg8~EN7@4f7B zP>w$6HeAoQ9H;S&8C2I#H_w4n zOHecjdPAcUSJNcpfFxx2E08Z!Vq;jI%qT5s``E_XpQqM01o{w)PI9ym#_JGqF@X^& z^)oC?#WO?HN}fQXH9?_7fJUV2^~=_CN38jxS$wFFnW-itb;N67n>Bla1V9{xP+_HoaUsvZ zyrHYB4$*c$qQeNr-49;NI&TIxkS7{O@(@mksRVYysiHcg4w)2zOnAIj8A|i{lrenv z-*w}0*QGw&`tnb?>+0hIHkr>WIK94aXY_#ddr0uA;EFU7Cqih%8+^H($vY6&FjKm^ zx@nU5Gr_Nxxh{k6Nww@uW~my}YMQ`z&?oAh{@Qso5sgO6lKq$m#7z<5ly$+Os-!)j z63rIewz*ok`N~mrZ~{*I;Fu=?M$7hQ=fD651-sg;$vXsNxRjT7KB@#cV=B5NMq4uz z!q4&VMh;1jLIA;clS#E!J9}1|>IC0TphM4nz#OXbwACo*_X(Y1%lzuw4^KZE-=W1bDs_N_Wc}|b+CfLd1#fy*k!oO}|teo9tU@KT)>FYFUw4N`TZFV)A zoH%_W^?e_@FMu`a&O9^G$>)ly_vSdz$_}ty{a=gwVcq7Fm;^F1GE#_P8H5RK7cS)i z0{rB+*fal#(Y8ci1om6zH=Do!r?*irqKrIlO?5>UWjwLbzX*dEwPWXZGtTSNY@}&{ z@}hD+l0MYfECe=0UaJFi5Y#li?XwuJ1HXcKgs}{>0CWdd^RVM|&C^ZCXoIv{#tBDL z*F=tNAxx~J3~BI{$&Ka2_Xm1QMYg3t|{=iNCaIF zVg-$t&|yhEE}c$g%Nduz^vSo*0p@qcCyd3voe;!pd8&m>4P(kk2--lb0x*`q93x^N zV$x;D_$>_1`dSeX5aeEf1|R(aGX(;MP)IfwW;bG6Vp)!5r+9ui1Z4g=WK~y5XdQabr0L;wSV$Jbm)@YC5J;5fN6PmcBxI;R^~P+KOCkTAn->r-x9y5*Gq8 zYrq}zI4;1+KV4FvMw2kO(z4`y)lk?s=hlZ@sCKvwyTx#9FXyQV>}sy$-vZ{cP1QpBq3kgv_6x;4>>qEM$oZ= z`Ja&CY?u?MxMTv(1+*lz^X!jRSZyY`AlTW&0s--7gV6~@S~B_ydPuRzw_JjP0m#mX z)>xqY8YYI3jsX~lBR_v$Mm~wogE!!zF4#4Eoe>Be3Q|jsJv`@Ov6ivMZMkRe7*Q}& z<7VI58esPk(3i}~kE`Jo(hZwj(#cxMH}H+A-c}ZsTNq4v7f$@>C?`^4BI>0Ga73&j zmToff#g;{qS@ZndiBsZrTSpH7p+(csx(xbACxCV z@IX6zd;QT@Tn?O%iNf$ca|nr3j^=HoV)j!8OCeQ^tg%JbjE#;-1MFxmv62B}u&-dE zIy|SO0C<@>#R0-Fotnux)3JgOj{#T{^AS7e78rCAPt=%@HP9b{FV6_pz8plxSMLyLgA zgw@Ca_N<2Gk^kRQ)E)+jvg%~S>z?8a8xs)T`v$z1i0_UOLQi*X)D|4C1A}I*d!ywW zR98%@vA3VlAw8i4S7+j&W1;qFYNp-md-nr((_9YwjE!_!MA2>7WLR_-dQ+ER>u=Yc z`Wb@b^!-jVBgIS5$gC4O@90P@U8wk!&8KS<)mc6y{GVs6?R&kSmY-;vynxc>_Iia| ztd}!ir0iT!y-EL8%wD>c=;WhvU*I#;CF6~GlXtqGqeN3|R8|h2o$NcLbcCS(E~~h1|>N>i@0u`Yy-tm_zyQN(r!WYf`~Z) zW&qKODu5Eu8bKT&vKHsEpxE0>FU?A7p>P+7FlB$fSFhUY1bn4LAH_J7k1+H z_RDRDGCIEb22?EL%wNPqnSq{7YU-cAe$`^OnAY7L%Mnv|q8}>8#b-ANZZNzAHXCM| zgu=Oa*Tx&WB%>_w5yew>(6=*t$Jf2PKLC|LF#K;`!cQE;XhE{*&wbO{da8jF&0O*m zGI9pZsctv~)tq!&!nZvC$iti-`QY$@y4RUs8qtPA@*&|I_rFe%dw=Z=KkPhX6wr?o z$W+(Y`|>X8^Z6OE;S*oxQ3u)&Y>8RLFb>tp=vlpG$UnW78a!Cu10d@mAn*uhl3pPv zB6@kP7-=R9rNd(`fnEv0zw_(Y1w^I!X*?EFHn}+b2!;rw-i%{wAv?el&;V6m1|@j9 z`=-BO(FZ|xZAOH1&mGs`z)IgTjHrlkE{KNaNBf!e(HQXJG1T2{G486_9vhi-vGwdI z>0F(T%UYeQDc%rZJI_xu)KK(hhroo4{bh`U+)k1d-r+h3>bgDFlN>*>4bRvyz5 z9U(Xkx`7+oAa-J%{O6$SESg8mg^-dp4+4uQMd*=+r*oVv8K(h5Re+5NP>&n_J>ayC zkAtu#K0mdK-8t_(bzyQutl`nIVCA&nLNNxrfuPT- z?UZJYOseL=LD9$uRKr%tM6l)x5s<`Cikzqx2@zFUffPgoAS?Ok!5x3*gUMeCE(~MF z7aV@;+JAI*#(Nn5T&-@YdFNJNUth`=!^CSBX(-C zDsL7_8)wap14ND9a45_S6+D6C76a_&$Cx=s<% zhEAGB&}mjxfB*a>X?zqfAtxM&*~#B8WY&})&9On@+NCKh>Uc)=f{!^UUq8cHLb{W?buZ19}+%F|8Vx+Od1 z=F2Bj%Vced8xvWtsPi`GYmCa36CY$`TZ)#zr9SQ00p;7Yo-@lnh=s{B2}Q!frexU}uw>(#P`C-GvN*3NwQ-++SoV(EAP;{<{v z9{XkL0l9e$QAdX+lwNQWRoxf`_aL>kIb zGU)1%iR%Ki?|~T>CaMRMScq9Cnq(*jx@MytbF)jCn3!NlRR`A75-?iAWp~LBV*G(G z2rZNuctsb6pZ5~=&21I06~q|~sY3ADI~SOdHqWEbPhdqHXgrdHqZ1Pi1mM8zjaGUo za*wm9sU9B9TTK2hz7s`}b|ntf+QVdG0XmIL6dtw@%<+3rvJw|LXzXfUdwHQTin%uy zNIVQidsb$#9}=|^TXoRog0E)(y5lym4x9{b zu!dMHVL}6QjS>VnOxA)^JVw3nsU`Hcp8W6npxB+chpqSS*;8}pJqA~0o_n!MXTQU0 z#RW-+Zhw3ZN6g1oPP>)rTRSv$uy`VJhhALsU3aS5_O<<&o{)LjZbvp@tuOp%{dM#4 znT{R6ZM5PP4UPs{2SFc2C{-wrkZ#TrSGKfu?|$~T~qSU>Np~a}5MKD%0 zMQ2rrpbRsySpl#gBA#<8F(U+$Fyf0ww!!@Q^Hn9IXmD2{B{{rDo`7PPO{}q-bJh`` zIdVzDWEmN`gax3crZ&=W^h_6$af9d@S{DBww?*AdonJ0`+$61{EIpE8>HCIu?lhU{q_ZR0MuzjkW1`q;EUp(TWYid@HH84gcq-u;EYS)pw>x{MNP1N zjX+{^nrdpxzV#&?{3g}9>($A?+y-%;pTAMRgAOhJ_1ib*OHa2hzVvh{KLwWEver+~ z-a$yd1eO)AL0a{?!zf4GlPDFXrba|r7#H3CKE#=PKlP6l`U(H zjEY)7C6A}!clE=J15FRK);|BXvMUwcMf$i_A?Y$wC>hqFfTYe6n=e^-7HoyPJO#4g z3ZIL3C#)2nQ_5colUOR>ABrE_o$oNVGrHQDpq2qc!h}!F4?xQo)dNKo=1z}b1;+*S zi?FINjz#qQ80ofPp`+UZSF%&NWt#NdPg%uzp(f`eo-C)4-TbM;vjWUT;?GHtpG!!J z2|yP$;GhxB)Y7?)icWo(pyEqFiC8Zr z$=&p9Rc&fA!zYE&vY4-W58Vp@=vjKxpF4aB2Ntv}2EUTW2t+W!%~ou<4y;LX=58xr z6aXC%I?0>^HFT?U`nHSO+t1b}K8NzlfV7Xfo0z?K9+U#uUa%moy~JJ zBQw>O7Znjp4Lsbo@9X+bOCN^#Hz4K8zhenVW5P3@N^qZg-JtYD2x6r$IQC`rXQ)Fl zzIl_;)2M)eJ@)r*G%Q>`58|5un8koT_0AV(8+U(A)UIE(8FWoQv$*dAy){vhb;M zSO11wT_@~!tA+Fb?$4#%v%W7Ya4*OphfLNA>^FjxVQStAr3>-rW{{Fomt4L#7vVMa zy#kJAuzUq~Q;PiDws7Uf6}Los*-7ZoUv_?XU{S7~!?al(ZZS{v7MTD`sXtgLpqHxO z>}dq6GP!5HaDbvX^EU8sGpXVTpOL>-RUHxd=M+I@-~V!m5PEsMV!i&&nEfEzjkZOy zLr3g~t%%Gg=zO~?D;y2WiGLVOEto0d<8k%_?k`4SA)r8O;5Lq`OTfBb#f$piLEj`a&m<-8U`-|N` z=J(>XzZLfhhaz@($}Rl|kq%EoM zvQOhYJ^T;r)uWTo_P#XI`&$GAKNlh?3gT(w`+oq#l6v>&Pc=9n)}m-4eO@)Oju@VZ zlV#V8Xx@b!gv6y|*ZG}R?6u0M6E4&_jT`#A_9B)`r!MHkuEB{>bG=J%QPJx&^l%Y{ z%Qys+@FEUlG%Cr;4a|8WLiGmL*kUvUSQV9eZI9kmA4QJcK<&LhUXr9Cn4tv&7Ufx( z8U&PD0Dm|8^Yd%NVkiz)BEud6odlmse%*6#gOmXfZE#$pzF>~`8wf+Nc1Hjm9^EcN zOY{DnHxGS4d_~E3XQvXPn6Z1A#d9TV&wWs4rJlKsrA4h0OT4uw_2Xdbn(j<=`)O%{ zazSfp7t7A;M@bM%TzIP;|GEb)wU0kiljq)&@=fPR{~=ET)DOW7D{4=wJ~LHfG2XG3 zwo7u+L8uO)<0^$N(dt8tM=BZn#7x0B&j?zov~_j1i{$RU4zHZp!hJXT!Im;2Uql0k zBunEVdowh1K)*$j2gvluc0O8~SV45-TCzEV#3yeLu+=8b4gs+aXBA(yF;}6-rK6vvBy2zGY^@rKL6FXU3|j*$Ao)$ z$6<$+Rb4Mqq%)QtC9SHWfSX2izIQQLbs+8fwXcP*($bB_g~X8O{ID^Z>r7om^B=>n zT0iYyok%&$Zt3WHF(rI`!eSp@iG*NNL)}juh_Ku*?UbT$_~-rEEU`gsJ~C^6uprcu z%$Y^F_X<64*qOm9Y^Z8+dfP4i1BI*38;cue(J-NvQ8Nzvp*KJFUXMdPsM zv}Gc_0gl{Pi4v$b)NXFJCIiTcWAE3>b6~dZUBB44(7$p?%dw?Pg}!}lAX`v6`)%E3 z#m`p*B-mt977#zD0()le1rc#xrrG&QTInly1norghxSv%nLnyKL{*H&v30{No&LqV z>5p4}rRXWc1rfJLAwdaHs(5-oI((TL{mZ=f2*f`h4=MT7|N2;KJ~X*x% z+#}W9BV=*vZcR&xj!4C;R@)|yXgtrC>+s8o+ilL)maAU2F2gtE;2+SE5+_$MC-*k* z=OSi>G$ZguGTlXnAH6+7dZ8&+pBw5d7%z))gQ^8Za`9stjeNgP>hSAyi4c|vea)_7 zwNX0Xn;1leFHEj(E%AmE;%@^&J73MipOIA9fVO->$WAHN>bPuEVM3Z#+J4ihOVP80 z@ilc%*vi~jrziL-Z)8n7lo^ILU^gmk4NuR4%-CIY&uWwVhB48iPsq2*;v-*~%`&`_ z$*1TN3`D!1l&{#8tQke3Q}BlcT;|`-ynz+rDO+;+7SyB$8)L0-yT&M{ETG)B%eUY) za{Cx9CWc95t`#gUe6e44rPr&mk?Ob$C7532 z&h2`up?ZJLtJKC<9b7b;sF`*pdxl{!u3?E{fn0LO?4%_zomOK5FUS&TEOCScHOUV_ zQ50g4G3Us@irt>uooWXZ{Gl@Ej*!@_tt-+;4BLq?GeF=~hT|i4u2Az9>8*4davY+00>b9aNo-8L<@9OH3txc{hqB%g4 zr#=r#UWRz42VSjeNSO-eW-mIykUS`{&}M5lxuEo+P$%sg@b7**p9@U!{n{T| z@xK13)OvoQZ%K^(mU7ZawrIdrzy~XlCRitlqJj-$vy_R`=DTRAh3YyheJ^n_gE&`; zmmbz)pTCHxngAkrv>DSR#Tv7JUOn^p&dI*)9s51%80%KHw#z8Jx9JZjmV%9$b~+nK zVKT%oy|0ET_f%sU2I+7M5O|FIxcR3h~egL!C#2!OILojThSU;UV1*XjZ@};F( zTK|Fj!zD%}I3`F)YMmIHewEDX@K^JGxX~{97iCUc{x^6K1Up7}VgiheQcBot>oRU$ zULSBjEP$(j&Og5iKBu9?&Kx?h3v)9Qu$&7-7S0|IKVMPxj?+YVEKUt+|}Zc;TMA&$&^2w;XAdoLaGX|)Zd`< zqw~V)LCy***Et-9aI1c|4gPLbsn<*UiABUicD^x0R&;#jK3EL7 z{W$m~fo(98ndgI#@(Er|dN*HXK+XXM4mUuJ#zd7_d&$QnAER@_^kcL z=|>VAq!PpPPJ}Nz+ma=l>YgCFXr@G|%VRaagxxiiT0!+cb8@!cOHMWi5Jb8Z#Ej;= zm)QI}UbC*4&RA;u2Nu1L&vvP8Fn-2GAQP&C1sC%*P9VCQZx=GPFn>XYzm?x z1si=OvQ(WfJ^Gm@%VDSf)2uS67kZgpuro5>x=iPhu>!emo3Gg?t^($-)MuCd5;h9~jwJCu?Z!jjRV`hE(@qEZIpmzB%EE6WG z5(b7oMFBg#f=qC^j*g><7n-THuP&Y^(=?DsmH?Hg1t?gTW>EQU8-e6Vo0B3~9%QOj zgV3}D0*XmO%}wS+<6S&Kjb`!Mi*|5(jLWCvM@lF6kO&nJpmx*EX+BOz3BJc8!SkTv zEh0M~+NeJ-)~%35b_Ii_M6A!lkIlT>E=30>nMb3!bJ--5l_Ilqzg>#n3lH2KbJORj zOD37+pgq`y5x;VBI51Km058p_KV@0(BZi99V>smj*{&QDUi~vmum9;MYn8?_xqyA- zT)MV3El3nuK%#bGeDpksALR%%jKBXEw{mWB#GH_3D8l7W!VUTDxWdH@fgKA)BzWgL zJo4JU4;M_?!@qk8_1LDC7Q3k)m0u5F8|u=DJFaEs8t4qpyboWx;jnh!I8RhgY||gZ z4`%0(I>hyno?66c$VsO@jWMLYE)hapOR^$Zq}yMifz_ z*5Z`|9dG|8NQ9^=kBpyZeQHeCO%7_C*#HJb2}bu8W%Pj2@w}#Zr=Ff(+$@IJi$rs@5jXNp(S zd!FegYw|x(fd{EX-Ka#4b+53oJ#X2+M2IO?OR6jz6EZt3RcG+S`CTZx55UpV$Xk515<`HW*J6kL<}OC z!jH++p0{t@=>0vm!Jk7zUA-x%G|uvwV%Yit^Ke@n!0#Jqc|xtv6u+QQz(QEytQ}mu zBv67+I_0bH<4GFV&XHuUrAtpNw!L{psQDA-_~@tUvlClV!0M;N%)4zR;`?){7V|53 zx?677G&vYM7)%7GNONk)Z_X7&wvQZ6yO3nPZi01=|Eh?~G`kpt4*jjeqkxHL8_^7?fvS-yyhmR1g1he@K1 z`g7?ok1r|FIB@08nIO+~TVL@|~=S_x>}A&>6R)*wI5% zGpNdeFo=G+j9*b>CgBV^_MsI%6)nH*=jW0_0`;1=UpJnCO!7)!)JSF1pZO#(P~dGO zBp6YWN2D@!l32jpW}<-Uo^=aB_-=C#0S)SC#;LX!xqqHy_kfA_Noo2qBJ2Uv@RWN( zZ5+0vmQlF!%Ma~#xn>dxsD(H$nu^^+-x?~Yc@)-1VV4WRh>@yO)I|Hm%z8z2of-(y zsm;Z zIf`Mp(khLR!pjR5#y1Xrw@<3K9j#au-Whpt$4-t;oz(iG6XPvxlL6UyO7NMA+sKdfgqaoBLnG~iT}wG%ECp%ktI+RNlJmi zeYUH_;Y$2>32g~vkRr^>AwU&zD!`>CK@>`89OUNb_e17=#;=>$b~d2Qd41q7}6}Siw>2dph$))DSFt^aqFR?f_Y zSM^z|ey9Yn#Wlz;qS18M14GAqEYD7e297MWI zW`!Z$C8^+I(H$X}?P4m|kxHa&P`gax0h6ikT}Z%TnyLES@oNqGRfJk<(^2s1lOZj0B@V}{Hf>sBkfy&A zyf;G5)lWC9(mNBEQo-rM+%nhSKpooh%Z!g%hFejo=CRT|f$4Um zwImqPd=8TfUObTrawPlU!|3Ji6HIjfE#ck))4TTmetkruon(Z&bohP`Hh!>HU3j&4 z?C->nC1UeIdFt~M;E9kI8sbZSd?+7M!GMaTLra4uJhvk%1fu3gM}~vy`}82ZWlCwZ zgx7G2M`z@*{IvE1Yk&>`0n)`=e*ixS%1U`7jbkH=&v*5N zXhcNZ5>vpQuYPBIYISZ&*4mx4$^tsz9{=UbBDJQt_s*JsFoNe!u_0$d@|1 zm?!;bVx0*xM5B2n6pp{}6~q2|ZPO{j%ZTWBayRv>&lR8>Kwtdg>ut$=JX3j}fS16-a@x-nT zT?lmL`OakH^9UWh7)KG$J~dD}NZ>&aw;Si;Gv`48P8Od}9(?LWI89&HsnI0Y4QORZ zOZ@|2ys~Zp@!}i8@*?!P3*fRi3^qtnm(HHkG`^_5EKp+Pb6wp>2VFMY!q0=_FIH;E zPi>;py@4>Y5&{=G`nTpCfy2%&v`8?}g$lj03y7b$V#5Jp1orYVR8u!y^n<}%n5Wg<&2$d{Ti96(**bgNrJhm)fED>}WttEdZsYEX8 z*woT+Eyi8^k1Hx~Wew42x@lLR78MR)xZv!xE=xg&TbZp8_6*ilCbsbjAb*#IFWM|d zv9^!`8>YV}nkyoYU94vG(;~UbVyB0UM!@V_6Rq{%HNqx@kpQS;XA<5Rz!q?$Oy&Io zUY?$Pq@Q0IX#wDo@j50x$9jA8b~OG&Kg_Z52{n?~6XU5rIoEr@RNg<}W#8FmsaWf% zeY+DbMp}vHkZyE}&Cn89dvdJ6-{2A!4#p_LB=lu%KHXnLrsfQR@uHxh)wPDh1+dZS z=$XHoN3XBv@An}{6!-H7$6l>Y@4e~jCYlR?YdcgZFuLxHGo9vo9RKooysHF#95aqwy~|2>8!%s;*-5z@O25LI9{I36#4ge5ce} z$d^N~rI+In;Zoxp@DE`A@Qt^>Pvx9{)z8Tk>HmCwt@V1s{q*M7 z=WeUYGPZ@3#~#{gy!uQXLMeHoBx9zCR|qn%L|8lQut$-flYaBLTxHtzK(#?dYmXX& zrX{{f)!R`$?D$Hjv%5+Jfls1O`fG(Z(vO`wd@qr)aoTYE1-QQ&tLeHPl>B%yxgj9b zZ2B%<#)_KC)e1>KFwZ{rN+U%U=>TQh_s;9&Qd&rw!B4Rw9L0#1T*eTc<3PaD4rl{EbbryN=nA-ZlipZaf8kSz{VubcY%6iN6RRaB}VNGho=S*VGotI4v z`IJg0lFYNGOx1Oe@9oQSrRy`-`E@HWQgP;}p-Mh_77nUJGgLynYHa!8ffCz}y{*V~ zTX8=(ZgDIguml&vheg7Lf7d2`e^YtyfR}VOZ=GKgO`LN7~N8z1C= z0VDlOI6?3e(AA-FxH?2U-J5>q{F#9NxoRg*ulLyu?qiXE@sc*+pHDnz+z43?`I9O- z|LtCL9{LXt*S_2jKaSsS$~i^^g?ImKM3a0NA~M*d+3}-^?O@xns@)lc@+G-rY-ATf zoTM$ZEB$bQ6O*4wAUGM(Xn%f`Op%2R6`>yoz(@?|Ezs7UuhBd@IzaGmo>*S@BFXlo zXfBBg6I?_yo%W8f{7KXDeG7#@8ch3y>`0^g|)rXC=N#$jls{dB7!lh3BL>Vw>BT z?HSp~0FHGB&y=i950C$mV@HyQmru=JSIO0OX+cqp6-Ekhjs-){6{Ioi0w;MAb|N{H z-xL=g8$JgUc#DC$)JcrD*jM09*I#`%Q~An=#ucp8X{BiU^TK#KSkv)(Cu|j#IjGV3 zDhM13Xf0lXYzuGQ2HP;D#Uq$0Ou&sS(1uz1>|jW=Jz8C@~)Nh&8Q> zG|4o@uNL1oW+K#9N--9V!hi(_Cr~c3XuN^p%%hOsgb8gqzO7A8R+gVQo#7Bi0CzQ| zafr+uHJEVb#WxC2(m1y2dbTJJKDb|sm9%}(ZCF9@7I=XN;2h~eb|jnGfq89&0Rd#9 z2fJ7Gz=6d${Lxa;LC!Av^mf2)nUsxv!)LTtB#EZ@D}L>9XXJOZ50?AMi$(|-MWH~b zr=SGCL8(Xh7{8W>Lvi`>WnBNG-GK3kp!)B<4EmQ9Nwt52hP$?}-@-^@c9#FApQwL% z+jI?S4*^FMfcj)NJVeBNA5VRX-#HI0TUHFW$=myD4Q(#*(6QQ+f8+@QxwAs+9M13)xAwJCq9n`RGh0zo%nYL(u_!mM|`AnYaYGm;F+yP$|o2##N~*;ca*0T z84D_l3nlCdWw&@lff}2`_8}62sTM{xS-3%*BVuEF_y`ath}Q2)P$SUgSHt`Yba(s- z-fBAccPT7Gf-zlo@`Wq?%TAVh{^dQ5B*umuX25v)=O{vtKo21iU4a_gT*95lulsHv zel~Cat*u1>@QK}vseEKW&|WrkJqeTYl>hwcHDQWJC5%`wU>&C$Cv>Mz(ufpdjr^*WL<;eygFib3JweAW?f%bIZCMzCbtCJx-?^{ zZ;Z`w{=k}b>)6qkD#q&`MNgv(_CD%p!EAR~0fh${AOx+Hc+~3%$LgAz9OxwaK|;aTvz&V`>xT|{$H^AyGrdP* zod<4ulMQ#-+ijzWCD+)|fB-G*bJFq=_4v(w;O>r4puvf#mSA1B3&#dYxPf`b1HZfg zU5rOtoka_}X?Un##>dszNOj%U`g{vf*Wgi!p-?6`9SWpc2<*teZuIdaH0I^!TfNaI zF@pq^4D-dTAP3;?q+?6eg@_U+t$Dk}hQoVqB%GHHcQ&?)xp9;bQok&a`y~4Jz7S#* z>Q#B%++u97ax$X9Le-a7XiG&v(IOM z>d1iG%upl{jyLHAfs(izz1k7H!+4OosZ02!9;{QBa57$31gtJf8lNFh3>rMDsHA0F zh7J=X1jG!?ZXyWTiS`YC_uPH#tn213Cax>+B=sF5A^*};4GsXGJ6`c8bVV_`Ta}cs z2bD&N<(2pJv^!D)ZiMqOJiZ~I9^X!<5lS-9w2c!tA$vrkKy~8r?uPYO{a*ks=f-dS zznd|aM7}9Fe%TXihu+Z1#aU<|EQYSyaW0hm$p6FITSry3#qGZvkPs2@&@HHxlyr9( zfOMy%bV%0*6;Pz4+;j-iAe)j#L}HWD4FV$F&4xP{=e+kFzj4PM_n*rc=Qw1`V#Qo@ z&Tl-Qr*p^afP>Gn&x~B!) z6DZdegkCp=8mxewQ3S}5oYoa69Q}^qhE!;f9gX{e%lC7Zq z6SUz?E2EirhI0L2xV!)@;p0dfA{bRC&}M;Lk^~gPLz)#(bdhv=xr>H40zh;Rl?lPT zFuu45vQE3Nx+ejdk_%!ASXoPlRN>C{dFhrrGGx$-L zqDXl=pTbO?+Qff12u^DnY_0tEVs~P1g83JC(n0knfC;z-!I(hwdn(rq_AGxvgL=CE z-V?CApV#K5yQ9xMAl*N_*e@YIerYuDf9o`koMQ|CAjh7+yyf~zlnzWbZ^5wE-;~p$ z^zmJfsCD^wQxo$)3nm75lW4)qiU9&LGIlM9*B1=p;@==DJ9b=r+6h|2AhaUXGT=lO zCL{vVfTyltVoP%}1O<=!bA8F^ckg5XKohkHg?~xhriws-&crmGQNjgf-p@cixF%X5 z7}{}wdE5>xX#|R)V5K_Y0c!ww&>(vWW@E@M6@5HM1Xf*ex{&ZyLG%yE^=&Tb`1V0w z@DQc)%g_SI9diwHM1h5aS1Kwp(xa|qnYb6c-t`@>9t3_JY|3gV-g3pPho;)BlK*YN z+y)m$Nq$={Q$fjy?2m1kiElx*1VTfcfDj|XgH}QPLNGr8=#{~KMh-6+5_r_icp7FM z0l()*Ql0{u*;YGjVq#NUuG0v|!3o!JBN3M^9Gy##R=exAA`KKyZ1)tWM^;CUsq{5$PUYus=&Ph z0aLbG$LE&VG#lxfen%EcyrH^`G$>a>8vf#5NxiRMzeyNzwptE9hydxpkO4XLm33zC zc2J7g1$!tA7$~UjGxg3>g8E8eF}+5@Ub&HS0=C$3vW z=3t}DgfIWKP`RX+r8M)ZhwjtaE55&a?}NibZa`ZCFu@5#w!6w_8s@B5b#0AuyA-x-ma*YteU7^^Nc`o;_1jZh#51r^kpmtVby zTt9yNh_C%T;x7nyQ>;9?+p~=u-6Uu9=9^@@}xW)WW%7@ULV_!ah)+@0e$i(=!7;|0Q zwfKAJ3!HquZ#@b(>eB7?#e+Qyt%N44zEN;nmkRWE3_9(8uWfZ0cMd0m;eQ(JUvrEeK0wUp&C41R+T*BMCbC-1fdE| zV;m^;#(KZ9OqY}*0&d+|6L_OaOTtyGS7|P;(kxFb|94j%jF>%6w%Jx14?3Z9M zR60NkSaogy{x4u-cldX(E$^-sm}Y_IhzJHHN$AMeAd%ClE7;P%KWJimwW^IUC}w~n z$1K?#b)K`}vwY*eI%dc4o@fPm#t;c{_DV1)UWK=gTcGlRBRwi%Kilw)We(>pta0$HFcJy1J*nrbo1*dlfcS(Mw5{Qn zfFc1T%7%%ELv<;r1_V6D-vN?$7WnJ+&fG`EM90`b^4YWjL z)RFs|#h@<&S~j5EKS&`1kQN5ut3oT2iO(__G#i4-&i=3ZY_quj1*nx>Ugr}?UbTYi zqUG{t&D>9rrP(|>f?_6cG4BtP!D>UvXH5WlA~lN_i3_MctbrQ-BIqYlxBW^N*jWzN zEuy2Ha8}z1(7}1VqXr+9n}JPuNMfCuKjn3IlX|$iR)K*swD^9fr@w>E*;trIZgbsV ztJYS;z=UrN_Vem$lNr8PU&<`?IicM3ojY$uTQxv6RerqfUUsHC9}7c3p2JuDzJC)O zb`H1N&-3WO4lNkUO^8mZnkZPOw_5uYbpDr7>-4%#rTm0)Nohm6ypD+@WyE2jUAg|( zNiL>2buH~GC=YG+{raC&(ufG6{z#1dBl>S{ggB=U1akPy8w+>T2fn2zI3He2=m-!q zv}ax4w~$4U6c6VCH%~?ZFF3>Nivg#FG*rHjO%PR&U+7b`v~R=et=|2C*} z5{+xUKUU!bu)FI*gq99NgBg;8jq4Zgbu_ytkqF(U>$6T+OyYG&tSZ$U{qHlW>wLC6 zbX}Ql0z-9=FIb`l%|Vz6&Qo77hlmQws$X9XS>vGXVT0Q$E0os+>5yZnqcj9cQ}nwYMV+s&&(53&KPCQ*=ih}L&mzkk z|D~Tb21=1sT&fliFB)Ub<48ZQ6FEKw9&HvVeZb7A1ACy|&|eKLEMlsm>=-w<#?1=4 zp@vxkc9D%u@Cek1ByPZY=%Aic(C&#uT*jDl;xqc_SEEX4_XEZ9f4G2JIrilhkf~+D zr~bElmGLDisU>|oc-j!IcxxJs=`!Z-DP)yS?lV$d25)q~mA*0!`*VnGGENX*WV%=8 z+*xDHOn@DIWpIOoj?mH+i}bcyDaOvg6-L4~$7yw}()B2@7+bX$L_uLKh=e9rIa>+#mvIkK25Qtz0!4rT7Z`|$*Ce)Mfn zg%s)CQl`v7m|qZ#kSj6GE|PE{6oZT!t0WY|JT~1Az3;cdEmf(9Qw0)|R3rEjVTt27 zk{EYASkzWkGnFGh`Z>y_qnD3DR37Y|d75;@7bGNrORX{vIxWAb|D*N;-U7Wv*nav3 zj}{ExygapnCYJ|Gzs$}0a#{}guu(5iSiQKI>yqU&mpdBsqdxOl{o-RdN;0ogQ(z9~ z%LFecvih<59B@igVQ!@;Mq3XCg7nOv`bzprn2*nqE;5`scRCwy%0H;BY0Q~V80;%= z`IuR=e;n&WbyCSloU-ICm4h+BYxED^i6MABTz0LadMiKz{Ovy+6!+xiFS&%U9!s$! z)jw*CQ)Le9oZnc7lfx{HDj5cNMVdyDj^(<1cs#fy8z%TOb$8ckt&A{LopCBkyA6y+ z3^0tDVGEDa9do2eFh3pNcX6mX+&jO-nikV2ZFV!lX{ac}7Zz1zVq?}@U$OJ;3ED||?0InQ-h-(>-`!qC!M3cFH&a+{H5rOt z(zuvmxG0&foKK?SF)gcyd-vT0<)0IFRQX0eY#AX@m>T=5SRQ?GJ*AQIy4}|4uNQg} zs<`;Y3)RWT#emI)*4_~>kW`BbR%Xf==gGR8i47C##}LcwdO6i-)uClJ(HXK*WP)Wf zZLst0?wgIzlzU4Ay5{P$_B7bsHm#USd&tHi9L>DM!aN;>q0$C!rSh-K1GToNpNRL6 zii5Da$9Kia2i{U#3L{pJl2)eUWn$?x9mnXdR4()BOz@YiFrRa?`-@G-dXNcM$ux!D zv$Dg~HZ-t_6hXarWAS$Ht9Igqt?&Omqe7Gv*}~t~U=3Pb`Z(gYjyRg47+|%FFEf{k zPlXFB_sxU1M2{Zsv^BqPl6q}`@fw;o@K14aM)qCkZvDWmN*h{s5CB#ru<8AZ<0(1P zHK+6%W6!p(@~DsH&P|&Y+}nu=@_K7beO(S6R_T(XmK?ri0yEMR-ZI#V7s|})6_XkM zQv6dKre_J$>*Q8=35>dghC{Z`s&8N2NFKTO`};wS5p91qUl8AIJ+!FHZl-^!E&SI= zuv6SqE}ECyL@krYw?e-q6yC>LVk07Ra9_T`Q$*o{e$~pWLOF2as$W*j)AsYA`T+;5 zb8e`FpR^8t0#UN%=yiC%933>ey}v~feDd_DroZ-v|B%k8rF-r&YE+1f7CR9(H6JNS z(b@ko`rhy5&$z2fY1{P{)a4Fu4(mjTU{}d2vvZwW+e^_;hMJ_Kuj*#|HGV!YJFeMF zjpV@IIBl|(u_3{!!o-1=Akty50CB!HF!9>=m%(q!#{S3NXDh_maepN$i7#JaDd0$y zb9ReZj}W7xa+gHx7PiZal8u8({{s0G1rwJ*BA$K5yZx%=ii4PGvsG6!W}QhZ!J@Df zHM0B()zL8b-2AjZLn#=J!ZCU@;ZI%#HOoDN=M>?a2yslh61U6HJt!GeNZ}02;S9Vf z{Pm|VI=6Xg!-ac$=i=DE@AheOVg|$5bF5n#xNFng>v|Y1f3A>(wunje$}z8BexNQ3 zcQ&j`C0K(j_>EmuSO?V}9d1MFpiOvOg(fcL8Zv8kcp||<7hBY4If}>DL&YbLKytOZ(1!EJ^6fU;zpoCg=OgM% zws(>W@7o{puWg#6*xW7jzXtp*%-co zxA}dhPmdJu@oclrck&*aE&{1}J-zq54!&TvfbxXBs4m7WRP)Mk+EL9nUs?L*7bM41 z7OSHQ2>qm_oAS)C5ku7W$-&~0)bl-Fxc!&l&vkp>kOtOYgt{2KhQBe?&a@H>1UL&<&A1m zUa{_c+&y>vir!(>Qmj(ihtrQ#Mw@KV4TEjcDT5V_y9u{Kg)sN7dgCxS;W8z#>y6f1 z|JNRN!eI=)g9W#bunb`3{_({g+KVP*9U@=J^&b7atgDo=YWxu8+!di5=B4`9h=H7K z+vv+y3`Of2W*IC-57*oGE1LhxkYcI*GqJStKWa@`SADkft#TLpB0AIVy|(4Ti9f|! z4gDytCUlphb7^eg3f!HTsPxj8+VS%t^=XNwp_qOv<6Ne^1m4S;=>9ta^f7_*qcyu< z5KA9$CI*#fw0F+gjOl98UD-rKVqcFk92ga>gAjtD(2UM&ALs-EqBx$Wsa2Wj|Fr4=BbdBp>+D_e_M)#S1Gfq+b^{X! z7A<`*6~r#P4!!Z$zbf6^L4LgrlU`)cw>qu)?DfxZSKXTTOjWa0y?`hpHW3{0cj%%$ zTqN4i=8d)!p?H0_&)^7jc0NuM7M+}DJaz$5`L%u+|bjQsk25nw$8ng zVGx8dp?O9Un?qn$6h z3dDi~q&g4l9?$PiNT)@;bv89$TIqyE6txWh(zTqSs!F)R@eN!Swr`JZl!D#LKsJ~D zN^617P2Va`pIH;m#O_p{e!kXyWh0;@_nfmJ?30Ke=ue61;9SilpBHwi*zs8ju92-( zI!_YG&lRZa9(7<9(JdYtd0wWBKW#U@X@* zXgkVC^0#+dk^N1j;gu8_?z#PHXE>Hr*E*Hb^ljTi#I50NjU9jg+fy_*aVfgi`MvPl zDXj7z%-7B))=xHb*)!xZBzO?dRIT`(F5XP*z?#c1)lLhLiZO-cXqep@Hf0u@SrOsU zgdI7(?28wN4z$hj!I2%sHl;xR$L%(PaPeAm(^S_`x}3#Rez{V&pPGSvAu`oCrabj< zn>neFgZqz8GsZ@;dC-(;D6DGB-KZr&+@ecOpHFdf$(KqPFZ#$g4%SK7-5rF2#jnz8 zks=m;{WZ^&iT=*uzN~lN`j0v6=!%uW`3mRn4)cI@{Q6?a`9PqHFt?m1Y3Nq0zTAVX z@;3fygzW4cM$5Ef^nP#y$0=33*LucXTSgJPeN)+P!1CEboryTn{JNp7J?5^l>#eSqp zP(~@HCl$pe_tm0i$9aClJHxX>si-miiX=Ld6$}L9Uk4p&xh8RzkqMiEsTseS?>uSF zIF0`OenC4%cU38F@&_strd4WHM_tfrr1)moWfLTPzfr~XJJ?7lr1R|^@&{6;-MO%l z?SwJES^f(+Ep^$?g|L6ORh0FrrfrLJ4#Bgm+!}L+YqdW?Wak?*$f{WpT^5V+_KZm1 zM(=Zde!{%d7d7J=SrY51U5^#a#pCFi=DT3ex}#5`-+!+O-(|2XO%qo8DqN=Iqo*$t zz3fBP(%uYb?`<4QoF+hwxV?y6B$SynnV)|#ziJAnc3c_=M^52y?I^Nf)=0ddGwb}u zD7KT>#+o|8LtlH2JtjA9G-52$Ku~KF?pLO-_qOqbTh$Xas9lZmF1uoE>w?y7*?ud? z6Qcqr3d!*c^|r@yTtL(M^QZVi0`cQ|kI`9Y=ZOsd#qLM*5#$w#s)%GaJUf4@`O=l( z;#Vup4=tLC`4XqKBA_rE%JwQWH8HFKW?@)oTlu zvAbJVW)qrup&KWLINS%{cwJtZXQYaNptmr z_v&A!cC?ZZVYEbNJ=aFWogzR|;DTeNbuN)xtTafgB;kTU)KE>jDdC9Q;n$_RDta@! zBu_f62y+gl*qQOP*HSTsOO|}R+4oobt$4U1QGMw%Yu@JO;u)Qf%2!?;LC6d$eM&Ot zq{H*AKzh6gjJq2Yf46sVc#ci050_K1E8*XqU?>~+#TTs>t zxiHk>9~Dxf9LA@FLfRHR^cc3gG%5i!*)jOO8HDu&4*UMenUlgW8NY8M)Zo)(79M$T zi(FsZnSzR2%q^z~6ZC)ih?dPFvU!WL5? zI`(m`ORPpox7I6_#D1ALku1k?3@s^x6Sw7Oh{JxF8Y!!C$GJ1^5N?EBWrS@`c)<~d zelYscLnrWRTof3tac*AOd_rMQ14@)wfKfw;F_fNl6yNjwd#rAZI9z<-O6+f(q zQmqd{t(0OiM3|HZ2BJ9zM*HU8oo&}Et7Ojcnkm{)iF@iUb}WmOMwAoUS(#wwReI1~ zs1&kbg(R;0IGt(von(HzJ;Gm~TA%SO@9vxI@hd~gt1ms3@5(qbrclCmle(kc4V#bj zDSBg>1D3q<71U5{j&D53W7$}@xBSFx)RjSyetfjc@5oqJrBFhrOBrDj>A5YgyK4f=%bFqcB)T>q0jAgQqjSqDQm`(S%UZLKC79z{eB(FifGT4`^7}KpP zv2M~GW4*G$i)kd*QKgLdstZd%;E;%NH^-M%)shnI%Fo^5*oemwb**ux&6E{Vx zCy%(Q#8ynwBbuxB{g#OChG|T?zlbFG^Gy@C|1+zH()%I(9ZQ!X6Bo|&y2VYBLd@f4 z7A&dyX5{!v^8Of`!vObCpUq^l7rqxk)kaavMp#Lb0!udm4NCv6%C>!*_uc9cw1qxS zDE|33Z`-fv%*3o3J;N1CcI4lx%esp>P;(>is$8hy zTs_2sUnG2RC%|F)7@U>BsIm!&Q)781?zq%U6IX-@5WB1LK z{<$G=q@s;ft$j2x?>IT4<=vYL7!>94xb4rBC1ryq?kYoyWxAarmg1zV z%dZV2D;$~_E~%XA+cN7DPNnIXff;}6Bq)gVq`W*>susnh*B4rT-6^$s%WM4R!3eg& zZQSa>)jErdP69Kuu!tYx$=#VM63kl9r=Bsm*5~CCrXM1820!z)Z+*sWKi@9`7 zoU9t=ZeGFh{vI!VI2-6dZeG(dM)uLd`!YVp=8W~z_-!ieu%g1(}+~X1vj_iFk zbV>4gU=99W#i)slX02b`rY*oQ8rCfolV*>KYDB_p%-P7>+ABrR1sY%o&Lb0jSYcE} zc2%G4I}U6DgNLtI^B6N1zDh4!?}>@m5e#ezm$;coiW+dtJs(7c*4v#y{(^g^#!inEUm!&pul=# z>)>#jmfHT8U2SUa6ACUY2KzZ~y`<_gZ_W1|x@@0xOw=z|cML9q#@8>XZ}V#IDzeA8 zwt9vuKJ`NQXp9pG*}P5MWP2LZ<(3hF8|-LGX30Y5sz!VM8-vQSbYFVGv|nGWGz0r` zY}OT>m(N?xHxC-0N-JJ`@I5`R(8cXY|Blm|-3_}(gmoSmpLV$OH)Mh`?MWfGnCV)< zhVj=Pe69XH&wjND93@1xkY@19G^6Iwy4U)8Yjd%^XRN1wC4)G&==Vl>^xywD?fQD< z2OTd{*HS($T5AdGn8XqK&J?^>Ld%dn(;V!lw2-?kXfYETvi)X(ZryCBQDFJXRqwMS zr<`0<&x@HyBS)X)JW-ieM;?fUw2XUF7CO!5Uoh|oe7;L4`#SPEzi|{}F-6_HEHDbQnyZOeQZ==9i6BFuNlf)~& z>O4Y@YPI!mtt)iD<92iE-fopZ!slkIXSl?5E{g_1qAziqh0oaJO51+<#IMkLDx_nr zd2q4WKuSpEg@s7S!WklnSCDLK)6f4Vf55L@zkAWw(S>5^EILYmgx6`99?wHJ!bf*F z-6^Av9&?#XcPKxFE3?vEx~vS2D+yyBE^jV5V^XGI47xnbX|SznkTWW*Xs|C~txjVP z0==MPvSvdzM`KndIMx0b2QF$_=m!H=W z!X$;=3xUT$W;5nhH|-`wjsvNFUz{Xt-AFgNk41MzyYjY&^P3^G7|E10C{L_*H{tlt zO`*}Hv`O12%@4j4cU*O1rf1g+u$YDV>H;|fO3#sAo9~c>gk=lfQ9$yj{5WOu8O}uKQm(4}vl-|qm)bZ9BZY-gw(0Wk|=f@i6 ze>W_n^y~x(Y_F0Jc|FYJ175EjeSzc5SoI<|?0Nm3?)N{J)kft0VVzQ-i}AJPE&r=9 zMk4-6_|}DR&IqF}NhAkpD)MyF_AXPk8O@=W@z!k+(nhK_jg7nQu@pG9*7=2YGLGhP zl$P64DGyx4i8woV=DvIR3&Zc9!Y&Og5ur5PD*U(t?9QHsz1t2+HB{LAYn*e>EJJ9! zZO&#yZdHzMGfVArGkip-9a(2@o>Y5Cqco}#-M+_4fvCDLyYqNvy!ZEU;%{~smQGhc zt-`%2N1sbFW?23oApK+tC+NIMn|@9=epb~GdxxCUnH&*HAZF1$>-CCW|1#i>0%p}V z(qx-8ZgLMT|3kFDPCIFlNBy~|d4)}4&xczPT$F;!4?>_UFeT7|_%1K1i82!yJ~s%$ zSmnnz7-n7U&BM;)GsLe6Q2tmPTW)hCMRz~ftoE^dal@ygK^<$3H|@eyTk|-PswOeC zMoZo_9)*5dFTZ6p5>_`(n!+8t))!PwCqh$6zL-l>}emZ3&4AQ&Y$ zEyb!GvORmq=`9GZlo=vRJpQP;ikwMBaQzgh z$Z2V)m-!1)=Y5My(Zp{V3|@+ySHENKIgIf^C3_}vG>_37x%s=7v-UZ#)lL}HiSF!` zepj)Tc3Qk*zk^NSp;Ge2K<9O;VT^uc$D0Xxv5ThMdxT_tJSSww9$D(F}3wri84 zGSh(b&2o3e1^kg@`9w^ot0Y?L-yhCisHj^8s~tK#C!e2Un zPw>Xmdk8I-4Tj-g-lMRkWWCwJlF@F@pFGcQj=;M)Q=6M|#E#&OxH6zq-iJ_iJ!1N> z!SP70vG2(KeLk6|p7j$|ztZ#A1Pk(Yazz9TELY>(YJ3Z4JIh*H@;$DJ{NQDRY)gOYMIIDBa4MBnR^t^swg1eg=6uh5 zVvti4>#sz+r1SJiTCL``&P8^5OtiQhVA`_LL^S}$YX-uJbwGD7Vm&vKJBQLvnQ`Kxr@`l(60T& zjjFw1xo5$R?p8`m&e|}w9IS4kk20Br&YcsIBX#~v5rU@tRZ6i4BOm=1h758CuX!60 z(q7vbeJmeD1x`fWJ)7UF2JUp11-+VI3wrj>c_w@tMdLQMC@eAN4sv+M57twv1uSSE z{h7kqwVS?ma5i}w7*(OJyhUdvMN^VLk$z`)FH|Ow&}ADh6On=pCQGbuyO*Yp8=6f* zXY*HBLiJG?L*i4MGs9sUR2_SN><;BAm33KM5#fh?F?6Zu)|vxHk%yDA8Hr}KyxmT| z9Il|NrfwVB;vo#3R4=65g9ww1!w?-(sd{7QHrlYM+Vo|nZ+K6(rdpL{{#zt3R!2VW z&U40tC9$WMRT69kTsyx!=eMPnRtgj!I)9HZF)r_2o4!g88bQ2UBG7}Qeu^MfH)q5dLTzeqr`CWi@1G-HPPo|s#HB3}@_-NfKRp=#O{ zqLY&enlo6lM60%%PTdM$X^sXfvWP7RX;>+-i<8@mDb8kj3f`CFoNgUx{P?F(&SD!= z2=rNa1+PqIZp{}{+t;gXshFLiD~1ZBaTJqp#~d0wJu~X*jp4JpX)ab2<11K@jZ+oq z{cCr4-eSl>tToD{BjzEWL*+sR<<>~tTW6GlP~X(+W>{KTwZ;$e0z(e2hSZFJ2-~f5xs7RDG-@_}%$BNIF4x?{T z#RX(#1~vr>35g^T!qnO8T?>|Q@iHTHW1X*x?n)?CNBlldjF(G{5cp32TBt_2^o5E9eq>rVCw-8)%q7QF zzM1kJw-P2okfqFd-pc3rhSttN@9Q$$vy41Y$^*A=L~Fg2H!Rgvr$3LCX)##PqF9X1 zFUX}KAZ4%`yIzH#ddk3OEh_kIdsu%*n#LS06z4%UUW7mWjrs*n=e%}ObTDoQnPnl{ zdk;fuDQ3RY_i}^XzPhu8Z5k_qW;04h%|yT1G3AasC%x9CKDH$d^NXHiOp(7{QtP9+ zy77!GvgfnJ4stP5$2E+B{B6*P1Q z8<-wr`9<~PyO*OTHgdLA3kuwP(nm95PpwfV6no>(u)t*cT$;r#qdp62$EIChU zoSLPPxt%xGSE8cqsSOe{?%C{!H7j|(*z)c3SU5sXIVOqN2W{O(xGoVYDO}B%JCCw? z#h2U*yX@I^mcY_b{)flGw995zpIup6AdhyS8t-kbik(-y$7kgU%k~l9H=D+ShOd&k?D5_b~vvB) zZzt$sUj>7GHTU#a@hr67{4Yk(=(WE59>?2(JjTC%AB`5!L|LC?MRei4_$N42;#skT zV5Mm0`4t)IV71}4GS-3deH&MS0LhN~UF*Twq-JW+j5fO z?mGMnUinc((fEzOykD1Icgg^<=ye>!St1ldeYtT)B@*}ko_g-`rk-CgE{Vdu?HEBH zSxKRpx5pHBTwBsS-*fs!ASdEM>Tvt+oN`?MSdgtTTxzB6d`O$&yh^wvzH(vjmf@p~Ep^3)XMo>#od-U=&dnM|2CoEMG_rx!*2gbkDn6>5i{H?fjeb?VU){quK!w5i>8HLs#-I0<<({e92p{BRCen~N zoV_V>sNS&^d2%yWXaZ$D8j4DJx<*x_vK6R~)A_vgp5CFm+bzqMA?&_9KDYyR`59pban@nCS0z zyN}M_Kl~2kpi$rPZxf!PieVRYHM&dd5*Rk~@@Hgwp!&@|BpGV>mBf$UIsT0Y{RzW# zZsAJSqA?x{ICInzzbD{{LVuay=W||-X%cIhiFHw_Dk_{Tt*?KLz?E#evqtrGmv#&_ znOX1h!PdPv4a5p|NEOm4Hch!Zog%pw&$E2*d{vn0pRh?Jnu`Ms)6GC%ccJl$O5_e| zcW$Xy-0>6bd;h-_=Q1UsjaJO3rxGosxH2UN7Dwy<)YTy#dp-h9wHR%zKqJFQJ3M(n zRo*9qt3HT1vh}rDm4@6q&D_-P7w)*ktxnzEYVtTsL*X%Xb3gMNf+~qp%vS4N`eCC1 zW83+3$_&e(y!_FI)2#3$5Gf;y8X4x z@5@|&cA5CVNGnkEJWI^u_q)z_pDOl}2Q*S&Plo52kFRYrYx>|Y!gC&OZu_m84Ng&h zhx%jTS-QP}loc{18|y8}UYlh_`|#phT6M|jLoH#@Ta;9d`9%oDArz@&-K}NMX& zZrp}m%wuq+9l(TxJ}Uwi0Y=aU0{TAmIJ7Jy@eVg^OY@|3BRILkicKUpyi;o5@2%`H z9!D45cAq6ri>q@~eQiJ<9Mwkx{~-!$pJshBc+m+6)kykkdV|No9TPlenJxlVv?FV5 zhV?s}Od9(`$p(TKo)?Vju!7^vhND`yo)=k|pD#3@siS8ee2_LF=UI8wfsE})tZ7b7 zeQ~|XbyO)KzHMiGK6OdJ&h40V_@oob5k@KMK6S5UmI1CM#)nD%GYuV#AGuiu0>3d` z(3QA6z$TZT`ry|rPuB^1scF%WAM8y-kzU!Y@-4X)nUWpK%(1bSGG~l2)h?^jEq1%_ zsWy|sMcRwSuWb4}p9vo^R+j{AFKVsf_WCqyyVHJxSEO%Vbc>p-Y<)<2ARSQk zBZfQ{S3V)J?Vo;!1OaUU(M+ANkPR0<4;e32cW^%)>=i#6UO$vO2Le@ZU|`)xhJa+O zmENMs)T@>0l7rdqbs1*!^Y}7nHqkrYYbznL>&zu#s52AYs3|GyUQgbZoi_@3Frt$I0b7V zV-@J8--`h^=qO-MsdrYOXH6)Tp`Ra1gbe>WVGhZ3TXl{tL2KnH>$+7?Aa@uwAzIV( zZ^f@*tXsu3Px5g-i!W7KeG>j@Pkw98K+GOX1>$Eu>KN^X0k*C3t7tR;L5hk(| z=^bWY+Ifm^^u!~WqNY=9JZ~E#vd=Zq6lt@(vJ}ZTibBm6XW_M zP&J`|t(nN*yY~fPljM`DzkB$rR|rG-CGG*j;)+>$RD1q7df8zVWOooBfi4q>xdjmh zlXq{~(djz{o%Xu7oU2y2F)cpJlUUO4t4M&Yw5I(I|G+&hlFce@gncU9RFT>}N#zmj zTNSQRG4A6}Hvdz9>aeeZVw#imc~HC6%R{lRO#L zRud!+$FO&pA&m=Rc8*t^Hc{2D0*Q9^r8AogO&8a(I{Bj-#-t zZ;tb#K$dlXKd%yn_2LLidVYvAb8`6hyCy9pNe4IHd464o`1ApwiS1$P#--jD!Zsj) z^2|#Gp>*l9H)u^Yd5U+B-+?wzhv=`Xe3^?=j11qbp%*kn^w}*~WvfevgcR;L-!p5{ z&uINhi{aI!L1y)vg9@b1jm_-Fw<#;hg=@#_$mJbGG6(Nr%l-JL5R=Ym_@kQr5r@mX z%@kaJb&b~TnfwwnVD{}{*i8K4Ovj?9WkH59oWS&Whdooa{pxp_WD`M~JEt4pYYb>O z5)bn+V8R6{x1MrP;cukqo}k(J6WhModBL{)NB1|G`rQRyv8(Y_!SuzOdRfP&$aLC& zw(JB*uW^ZdP{z9}PMtr^w8T9h9zNX;0DF@24kzXb*~jj`_dEEg48yBg?N>?e z$9Zk($pw!Pg=jEh~iatl!xz7bD!=uNof)MZmL&wOslo@*dsrY-2fW|Xp) z%uIOdY2=3w>(2GAkpSvBYVTF)r2y(kj{0&3(qbI+=r+#%IrDn->&4&-k6>adT|~O1fXKQyF?Qyh^oA#9~P~-rMF+Yc!)^a;Ew))E83*VV?k#lL_j#nlev=A z@;=BASLEJeaH8DOTi}tc{=_1iJl2b!0gr#}NOqPD2;#Sf9s zlNb9h8k8QVSNk11`JXI=K@xDlp8$X{JOB{R2C6T}AV<(?S}%XG1lSP)BAp^og#uMc zFyPSV07Nh__RF2>fDp1k`27DOUO(d0i1}4yEj7$4t^6i~C1uUMI3uY5d-~|pegLKq zjyTZ8?1>2ijl>YsUXXfj@Fgnv(HFS6U$E|Ttm9_f;VnFI(IH<$bHls`@h3jfG2#UP z1qeB|Iwr0xFGHNTYo|o?k>SDS6a@q(@vdD&)V?A12K?DaKo?fD{GXWpD?k!Mz8!!_ zQPs=;JyA7PI2Zz<15vLIiU^?SfcKjPV1+_B28tfXqfqXj_w}WSb~DNSo--~%m{&M3?1YrNQs@H`NUY9jSUnG9 zt_na~2>iUPdu0KjB9(sqf6>E`JQ=`IA#pn(5#z%kxjRHz4C{apct8i+gHZw@{Q$xf z@&}hZna2VT=r@2>c^?caeRZB|`rQ0swtw9|OkrE}&%m2LFZX*c&5P0KH8SXmSSuZVv(&0_Ai2E$#-m z-*)5JAK{K@hK@HkNnkK=4sF}bS5ZL22b2E)fjVpujW$)ASGTb{MfZfk9rF^oWc$2- zKR#7_FhvjDU=e6&j4CFu^khVK>VFKKX(X6TJ50}>g*erMxV9DveT3!N&r?D_@X`)Ovd??4&Xl4 zV=0sFIPgLm!%l#u_x#fVKndmg+;3U{E)%1(r>uUvdPpR!=K^5&|5LLgi;GR0>4D`M zE(~H=4+!VqvlJn41C~ZxO}FuR*Wl#DcM%5l)_PK73Yf9GEy#z#x|f(HlZ-(>({W9v zG2@H2Q#>Kj*1+%k_3|>IGMo|zrd8pQW4{DSkqD}bstR zv=$S-zu;;TNHHKB$IDwUY6AnNierK9S;W}6%dK%a@U2Lc>KDGTMGc16vP#m{poOa1 zIB|OTd=r3*vx!$$#+2o?gh4~jciCM_YkulSz~O9vzk}Yd$2tXRbF1PxyKd>mfj7W2 zeyz_~-UnLx`}gnHiuVDPy36UF6@Wa0vG9HMC=paKDd z4h9gYw{5u^(Y4LG;*$(l5EQG=<98}^9%5VQ5kx@X?%1({GD*r`O!y!TroVfvg}e9h zHjUssumKc;Wg2~RgP4^YPDycb7J;<%^jim?5?j9jxaqZAUAH4^AX8{EQ0+WGg%c2R zp$VC355pvc7@G>Gsu+NacK}Hw3!wP{@B*AZ#7++1TSiUI2=em&x)`s>Z;$}Spnp05 zZQL_@agDMxYVp1Ac#Z+E3jk)@>iHHQkFhQD63-;_&ro6D0G+tPXECfT6YIKocPj2U z;8e*@16jQbfaNa&)B>QXfLW$=XaaBX_iunUmct(bT!7x_kv0MqNL{bn;o7b}!;Mei z`?_(02rd5D(!Jw8f3qcY;2P2qf$({le0GbqP`=d-(vst;-?$eIx{n{MUYzd#9sha{ zc;OK#sPhDzy*gMML9I$A$}s6FjB_GC4_B2acXR==H6Xyuh^lI6Xk@Lu1dK{u*4b^o zDu>X2*&ye?bln^HXUJ>9hELHkx4bMmO)v*9@A7<(5V-xuQAq4L(5!BcL6BZkO=I(K3V(){T=9(mMgF<5e z$@cIJ4QfMNuL1CH?mSRc6$Tmiv~Fio}Z5kzSNmKTO4{e68uV;JRNFn}Eat6hzV zBA{&nr(S%R@T3W~g`C+MbEEC4f%B-RO-{hO4>-=~2%nqd`2g2qh~Nd22C8!&Fu&3YyRz4!kRGC!0b>OG$VLPe z$8f1J4aD7tkp6%U4(7$XqN3D?Ya?xt+X?__WC5ChiLdTb*|5MECX*&AFHh$#e=>MR z03MM%ld1EU9A%NGgXgOCp-~v}rT{<`(sj!J)uAtD>8O`~?Ha}phuygr`hpoR?2#r4 zAHx2_^l-y5nZ$npVkvaM&LK)LhntY!IhB}F=A5g{x%SV2J`wLVX@X0L31=yGsP!_!M{>ruwnU`nMejU z=bhU(Z_}8p5NN%FD;ba9sersfo~9)n4zAd3lr(6B_NIl z4;(yl{(2eC6b^U{WW93Q2rGsr)=0H-n!MJcTF!N7|giA#~CUr zC9rTiY)eL->mT3q^AOdSiso8R@jSr*AR1};rT3zm5AXh#6Kto(${M^L4NJ$q0k<7a z{{ceUj3np3Q%5HN&?UcgjLEn94sgVw`%graJzzZT-lWC!-Qjk_Y(ZHyfpcHT^l=W*_{95+nBs7 zUCfOi7;3IhOFsR_zmGWCAeeX*zf%oTsDu08a(yGx9aa91C!a451vI_?J#2a4fDMg5KsHn{ldmeyz>)u-OAPB9yL~rX_VE;M@wu8LVKhdvIL7em z-zh;K8RrtyeK3}x( z{@`eSP3X!M*?55N?8{Mn`PwCcRy2MLaxO_>-m_IIA@|Yd~&m6fBaN# zrr=5gZ!F3` zPart!f7d}@g`0o1Uf>~1yW|V~VB^Kz(PCm%E=Kz7!;g2KXVXp5eO@B zJfAt}d2(z$N`al;fTs z*-l;3@rm1(`QImW64!vMLV4G+Ob&od92{mPvuQB^V?Ea23Z3x12WkXL?N?>I*gWum z|LOV-?zPI_n#-SMUj4{ET1?5^w-V;7Rb8HQOWwLqY&kT>B{*P7J?*U{BRue0-fW^x z7MveL$aY+Qkx>D2($49`0c!b09)Ysg5i`9ViVvoAH2?dp`lRKbiX3fPwyeOH%B|_- zW|(_nircdMs^2iZA-FyZ%9YC595UJxV4IWisbSX5b_pR{#{qo|MLf-B}zOKCN!z#d3wj6 z#Qo>dfIp=2Asd=!rk^9M{?)U3Q^rrj{_a#1%V**4C5}0rHRlTCN+&0>-PR_~cIYvHZT9*YWx7SjIfdp}E2}%h#jaM;kwJK$$A_WGmYqbwcDVzwn(> zC=+F;ZvWrk6U5KToM6Zuwpntmu&{6thF}r@yA+jmT6d%vFt)AKKJkS1z1hMw3Jfgi zH9<$5b#@5Dn2b!(#A|=@YUkL~JlhQO?AXa*FSrC%jm%@rxFsAL9~wPNS39v!Qj!Hl z4;AGOY-=$^czSSLUPQ3VXV_@Y;5GBHJFf+P+CD3_xSHw7(n6Cr%(<;?z&Ui>m_df_ zl5uVKzYuJSyBXiE++%--n<&wF(@LswG%EJl+ z{DQ*iI_&OZ=%{2UYNoYl3!5laj&4vAz!306ZEGaH-U^?gDhu3>!$0%IH!12jm+|iqD3D=C- z+1c&ORAaXv3;DSBf0yn6?4oeve+A%$KVZ-(2V7iSf?xdih%oMz8lC{BF!b(i#N@<; zseMvH!a54D>xDm(rgX=&G&PklXSrQr>%T8MM~kaD)kA8u4tCx6TesGfmn4S>JU#3D z?-z6|fNLji!Eh}`#Dvvn_}U1J7k1OWFckc^o`bM>lMZQUP*LCzvBkZl^P5ZH#%+16 zq(&sK|L!XWGtqDbvW~!VY1u2FD6t#`4oJT65tOXcoO+`T^QiV#wE^iL(jN{-tZc2H!WfjhN4Ych2 z7d4`mzWogByO`uT%}#vJP%^h;2p5~I%TBy=1padY6Q2JY{YWNINnc2dFd=hT$!if? zeBvcWSdj_&ZbKOl947}3hjGe&I+;KU3qW&>zMMR`?%(~d@4_&fIe%gb04`t|Ipfzb za(eTcHET|Pdd&XM%;O%$J(b!E{O>8OQCZFH(XpE6gvQ~+DtP1+3e1Yg$WPDqe~&(; zTaWRt!}3_3{VoZXESc$i%~@_nfx6sA1`k8^*u<)>QJgkV_t+`2@LzV%HTFZg|@k*=Eb z-SX|_!N#!#t}C!_xcvMhoJImbKw544uykb%(}gj@4>KJxwKn82{{A5xo3auPdIkNz z|5nY-K61C*{`zRafGx)V)n3aNy;cf|=94w3tsS>FZ2x(ibOisuiQy(wE1vF(iSnHdge56G~#UQ4U63* zU^1L6w3eF9X7Q&sbIs5RrbOQ4(0%Il>>uVV=k3|CQ63pQ3BgcJ;x49O&p8)8-|jZk z;hN(*YQ8N$WMNgAiIDaWj}A(Th3%frut$dhFrm}_Iak11X8TClk{20mirL_+xMUv; zZP>AD|A$cz6xd|q+j<&mVzNSbx;hcw6T4PrY8@QI^j0hI#PyAhs)mMaU!R}x#njrd z-MlL^n!<@43kEYEe`3%=>nN7~!=@_G z(c)eUZm?&6TWsG`9Zc-iF*@>kqWl$OTSuMKw`82RW6u0~3YJDW@|EA-^Iz}5jb@-+ z$bZ9Y$_$y}`}JIwB}f3qZhFak{n?*03> zkt>5e2N*13eUyS?UBO=Dazg(cTy-`On@$)OQBkVv>Uc3gk&N3*@?H!^P#M3->nA0< zj~ET2RdVMu2Y2IdBSJQl@wUW<1dHP-X8yrFRc`u=wcGrU2jE^VZp)9USMYLYh>ZlR zn~dPIe5YU=NSI6#x4 zo4Hzo>mY+j7yooESz!)+eN&TKhVK34+>lpwOL!Ld=haQI2&`vIIA*$Gs_^9!h8_Z6 zILvUOZMxZ;Ze^ zLW`0MUJ?1d7LIT^AjH6fQK)G*D8m=Y5%w&^rjEF3iX|L2PiZ+zMFFv;M!q*XT9k6q zfgyv^VP02FCXN$l*W$}e#5%jYFfqCOlD!AKW*_QjM7O*gCm;VNUgDu)PKsE9x|bC` zAAWdZ2tDvB@`1fjFTQLQalFbrE=EQOliB5<8pB~9_2%evk6@$CZH~ZvKcUIAuz&Rt)kki9o@RG(pJMc^>N-yr``bc1Fz#vz}VrRzQC<9!dS~@8*|l!YO~N}Gf0!5FdbTJ#Tb!5!;}Oat zE`xPE`C|X7B#?jKI$XPIfa>2pG1=z<2S!|*AaO3-eSa;t_R9;lF*}ZL0PRY#*m_d6 zVi;XR;!;bt55}qzTRqb6#OhXnwfe36bL941QGW2jiKd!V%~xUR<`)=9h*gX}S3=?N zmff@`iTh;S%D@9%cAX~jSY-+kC(XD3<02ym=F!l@{S~r>m zrKfjAnUVPIgC}`g_7)sm42HFw*C9m{zq*TupYW<(?|v;-rhM{bx+{mKf~Cwx63Zy+ z>gop&rzK#9OUYG|!O(EbTD~19q-$|;T9#RnSb#k^nnXj15!RzYk0JkS({Be45BSnu zz$!hI+t5c#f)pTM3Ze^{)B7&(yvfDxwLa3>tH_j5Mc8TJOE|(DZvIh2AOHCHIGdcC zcL^VkAZB&MI3}gtsY$M*N!Di?c0bKc6+Fz~m2ku@-Z5 zDfO1YSm4^st6=Vk4vv)fqMUtaaWLi>XL6j8Q(KWRpZ>6<>pSeJiJ=iPM(=gmk?hu{ z=S>fFQpuxKR#US^MK_B)6M6Tp*|jHv7q$UU+UvURyn7zbcHDkG2APs4EM&fpzW8je zgmxxEB}thcX!dNim!9MOu*&zx)0;o$F#02udN}NeB^48+?;j$`Z zh@xRqn6NX`_)>vsme`-y?u|rT;M7Y)_+r#lZr=}U2VaN@KQrHP6eG;Z_*&XWTHnKM zxd-8$V})o<=`;I{EgN^~S;I!+2jfdar-+;K^XWdb2-IyDMf(l?P~w+M@yc4c`@<<^ z*oQQyALdY2Rkdn}<|kvCsmiyoVfw9r`^-oKmRv0$B3HYt&0HeLP(0mL|+5N=k-moUU*mxyz`-O z`w30FJMclJk~ry>%Mq(q28ZHt8cH`52(!o{jvxw}_QV%APVBZOFb1{DI4;VXv}D#Q z?8cV0vbG-oVjV#h$wULo6*1(o0rrjIs=TCuu(UW+h9AH$wi=UeiHRW0Nvk}PUwwPD zc=T_prSxRHZD7?NEg|ef7_9Z79IZC(cF3t~HfvT5ITgU3OrQHhX)>~EOueGku9 z-l`uz%6j}DOs$wz4&tj2143A8C+u@@Pr21c-PlMsHTAIhv@#r-2t|>WmPU!Jpra5( zLeSf(Bv0Z@T8^9%dEhd8O-L4a zqJ$v)(_y=YZR+A@iEBRXrN`r$53yj&Llj(VGz4M%(Ly1Nabj|fM=0gl(WoBs-HC}>_9iMdra<@{FOX%E%T2vj9)yObF#C0On{Hu z#0Cxa8hWHd)P0 zz_U)4xjgO>$}0wlm$tX=Q?Id_=Um6#6oHOxf_D>?2?LXTd2RO3ZnL!X!E`spdub7% zPUn%nuv1?>1GnE~Q-WC8g0B8kQzP6gxW5deBdD(qAkb<#e~rMa%a49;KlX@Nh7yZ= z6Eij>zfdSQf-{e2t>v~k1s(=u(#ga{mvSE}vbhvj*PUQQ^kBm3WX1yrstLsada+`? z?T>($6CS7^XI9yB=Djl9U21>*opLX!Z)jkElSzb-N#0}P2IWux={uQ<4xq~;Dtctk z*^lbgH8tdJBYM}snnZ3fvHsb~H}Twn4kCb}C^Q)Hbyxv3SV7kGmx7dJ23}zXm}ma` zXJ!*H7A{)?_8c%zV97j>47cOk`6%kT3J-feKE5yQcAWC=&!wD)V(2TU-6zYI z{$^p`IV(&iS>f23F<019ed+J*goGU=J}C^qGFSNh`}f5YTN^x8Q=5le<)8`BN!MbZ z9Q_4jIC_Kt79{yy-uZT4pEnd|-G|#`!XH^Y=Un>AMM=LiWo1i?CVS3*)dy|{OXYl# zE3E!FIIs&`va%*}W98JiSIy8z5VGRpJ>h-(j+07eK-LH|a@{4vurq6<>3#)yAQ@xjcV9DllGjc6y}aTw}`Rx&E6q%ZUFXvtw@YyFKz= z_zBhqSfS?TCM<-?KRKwUT8wW_t(HuCelXH2ZNagJ%(c+0$J4h+i za`tVVwZ&`iTVDI{AbXzVckZHnI11a+aXhl4ur4&U>nJ=%$o&*-mx0G`P|zCN_QiWG zp_41;Ad-2XV}`>27@;xD+)iUft2ddNVsl}U3-B}J6w@3KK*sjjKX1g#Y_ZXy%ecZ&7b-@?Iz7*$l8xpvr& zw4dFxx%sJ??BwEf?yh=o!T{f~b%KB-(|M@t?z1;f06Ri}%7bBeo#Xk(h1>6M`EgJ^ z1wh-VAyYi&Cakbe6Ww?89fZI0E^ilzf*S1)3;|Lz;d1u59trtsB<{K4u7c;+En6;+ zy!`HGo^^_=YUAahq8fHR!9B1oOuwkPI1EfcIykHdhgS8G+{D~;Zx=P>Ba$1%etpci z0f9|qi-cC&Hd&W9Pd>kCYTCpkcx2Bhir9(L_93Z06V%wKX+n_r-YwkHf$xe0sF;K( zZW3jHaIrMT!Hlit{&~W+cfCSDVRX28W!&%O#{2Up+C~5>N z8p?CKRz~chT%)X(v(3O9#eYVM2z>%%V(v9(+t=3@A9^tlR^_H+o>(UF!0<199%RSg zuhswg5*ACOL!zom6Dl&F4A9sET~Qr~GX_@H06;W0B5@6Xmp9?7J;+=kek+@l> z%e)FVf_UYC7a@>l$ML7#0QJ>a#13I>5-ZyB9RiO$P(t?S_B#METl&$Y4U_@)@%pmW z+@u3Uuoz`*Ff}3twhIPr@m{XWcAthUORSHKbU`0RfYV9^w*|I?hcevS7~_3XBm`n0 zcvMl5>RJVFEx$DIuwJX|_y;XN$+I8JgBW;G(pq-b{+1tmwIj;{{07Ab-;b~m%a3R8 zh`8s*{{H@CaE%lnSZ~FzJA7kltj{%6K7BGB>>9-fwlZKBjGpi={f5S;$A6P~Ipn)z z-M$-p@OY4UB_E$`JjT2VVY;SlaY}4iRq6;YAIhpE`Sf21n{?$Bf~T?jD693n85o0$PHrEoj?(!RJnt9U6V;4iHaXui0<3;Et+>oPDl|5o^*43vuF`g|5fM?3L6Wq^Al(Mj_E! zgYyL(;iKF`h92xF+DEYfM4rX%c=N1Xn#b<|-VTUJyVT<{;RLfvrZHfLu~J z4g9@&t?L&6I8}YQ-;doIoU^-DscKP$5~{-AKen$eO%dx4b=7PR%pL*RZi?{7-hYp_5CntCGAWD5qMDo zZDu<6B_WioqPQVZ5hwGHPfR|aEfJPNVhM#E6sbu7uhEv=Pm$W7DE+4-p)?B*cx`I) zYP|1bcBzI*v_PpS*hsZt4+wLg4Aq`X{`uD2`*S%dLWBowasLoLjnHTXr1Q|cM22Dk z)Q=i7aIQ%CuLB_su{$W)FE6Y0Id>l2z&qhh<9qPZXlIA%^9~(4UcKAkNzSPNsl7S# z7q!ZBRF5fQ-G@qrw|Aw0(U_98AnzgTvP3JR*hNvrLS z`C`)2!h?qnH;OILWsITQVoZ47PS z?SAxotLjiH*1&!7tb`KMF;~$DdB@tNqw6>30ogbZRQdbq(!|1RGX7enkgAtES51Uen9CTrJoXA0Oufdk7X${8CnRws74vuItt*k@s*X zEMiT+l?jMmEjwClomirZiVM!|&4`^4Tv(a!MICbT%;l@|ji4*_R3I{~CZgb>PfvDW zI|-g_ykqpx8X-{cxkFdyo#1aru6_rX7Xmtrtnf_PN7HL7A~s7NTF<`A&q&Jrp2B`F zoUo99o#FW6pV3hCpMtS`W!q=KA*5in1E7$N77RPWiv!=szEzzM@oh?!Z(Cs3&d}v2 zf0sFh2h5_Op)qhvpO$Vj9}+u1dGr#e-*HWzI)u1Y13Adgyd=2?Lf-?{H3@j?YJ+II8SEnzgb#mwD*@K5d;0TwABrA^25jZ-h@?SFKYdFPaw zz;V+kEw6uI;P$Bl`ph*RPbcn-ZJ1h`L`_%?@hlIJ3s0x#j2Y?5JoqC!Uo38x(1;wk zP$Z9=m)v$UHkN<+L)^ZtLW{!h$O9&ll$%o2_%o$Gb6$^cyag}aS~+7Iz+BOpBJ>JC zjXiit4^-K&f;bB1QjUA8_kz=;t0tJt(2t@#M^Xw%n$+Jc}E7cdkdD(3Hu@EI}xJZq{GnuEQ!8fU0HGQT+?><@o?#sb~-grSn5O z7&tjek&1=JdaCh`Q{hoGHd@B-zCC*yn00fZa$*inG&Li#p_HHF5#6~{i3rT& zymxcB!KSp0a$`Qo2Yb$adea`Pg=(MF6N+CpaGRETyqvpJH2k!v8WsQBVZcp+MDNAR z2^T-?Nr(c7CK1y5hAZYwbxVt*0l-L{XIR z=h?OLV4p1oL#+OH|CR5YtS#eH} z5(mwfA|I9_!$B2`nLmpavc2XmS68`Q<(s^`HL?22_r?;}@9n!01n%&TRIpXuJLs#t z#IGU$zR)2!0*4?%!ro%zX&G=v$2b83p=tB#o+->n*ec=u1mKJz`q{{b^3CzxcaVr%w@I|Tre;-`gjT{{x&sT7?B=7m zXD~=zpF^iGasqY5IM`z5(kIGRo6~eOCz1r7T5{RbO1O<#eEIq{q_IPrz57bt*ig$3 ziRPc6B8tbiS5{U!!rPWO)RTrK%+pwE*PqE2-w(G-mT^kK=XT_aW^@M#U$LIAy}dmf z^>Zri#?sPK(raY1c64#6Mbj?)?9r_=ZV&m`;elb&WAO&VW`0PH-f(bbt&Hjp+^wA zMHuN`yMNCzeaX`!@wKfj^v~yqI!Y4Kaqhg%;&~2E&d!HpOZ}_bmhf#VhbQsz4en|h z@8Q`-5)i(*zw7yAMgMn5s0eMe{F-shyKeBRZ2-q=I=J52Mme>acwX~N-+vTnMe03D`HlFZ)_}C6!H!rN zh%Vpup4wNXD$!dbRYe-gR&>OU^*K)TX-K%elN5#aLhZ4!w2Vv-dN~xv&VVl^S6n5M z*U-^P&ORRJ4mZlEL*pq@{)&sCiHS9=Z411YN)07H<0y`TXQ5%s5JE!6ql5YPYoZ(@5*`3GlSt#!(FbSj3bj% zN{6p@cUut9^Ei7~Eve0YXL>%jms~lnKM%lwyxLMtS$&_`VG0-mT;cp2-&Eak6EZCnDduoD4oQCy4X4 z3c8yXIc24#h2_lL+B|2+sIcK!+m!IXqNOv{zZXDe`k4;88`aR3J;=%ugW53^09v^3 z;49T3%U4cn9#h_brs=?MuCQLeckkZdY3YC=N@;{rT8>_HXXKA4z9l!elgZ$jbiu=9 zpbYLC894&3BOOe@2S79Bmj$@^B&Z=EibkQIhHgfbzyGQ;dp1YKo<>!vkCSS;8TyxS zU~3*?8ajnQ)l}|UHX}nrZHQ^4rKI?TeYrygQ)8>2i`UlI)dk{8wZbHDf0$Wz8frTw z1_@yW_6-dkQdWNY^eHnZ=lM&ux3F9EkX18a{Fv5!`ZOT+rSFZLI^Gr*TxKsX_+zUC z3yo{-i~i^Igob6dVR^9`CJVadvd0dA7^;6}@$sd8vm6ikJ^Yr%FBMKwMbqXImW1&CaI( zd(-&I-l-<8;6QJyE}nkgDJYUsAo;moH;-=mI|K{~=h4o)`rBD*s;l4OfK-rB-bL*U{j`>|4K+3XIAtp= z6OV@4J7muq8{egyuB=J>y#-ucT7>QOeToqR32F#3%j1JPLPMzZ6d39^I zplyBRRW@tYqY8k-YOv1c;z_~MZAMJ_f#7#(Y0=Xdp3QVy<>KdOMvsDWdM^~!NV>si zUKqc+ExCh5SXbGjcZ(?X$jAt|aEOo51vQjRF( z;4mUL)jcGv8=;|^Deme=q_iR=3QtUnFe-7moLb-d^(&*!W2Xjs5081!VA>ED)mROo zEgb~eNw}!Fxw*1(jI68ut3>&t9#b0|K28OXco~SzX}#K*_Gg&XL)rqQJjn)D1; z&5lF4f#+>uaW7J`Lpn-%B0_+!xQdVQ1_^pOW)E;E^~>`!OdtqX9zA-L$kKoTkl{dZ z*8)HICn#+EvW9{q@5nUdBpFy^=BZ&C%PnY81^Mcfd3pZ)`a(17CkRlL;!vQ~S5Ho6 z1m#@Sr|QO^TMaj%XRD&Mu0v+4oSP38XGKQ`=hm%T8{E^;KD`GoYl|>$*O7KMDMv1# z)vVPt33r~iMW%O;<*|cul%CWrC07uZFp1K^VWXIsSjiL4 zg9i_ip4S(b6pjTmEAvZjd(rv^(rnpbeYTZi)#gzh!~l5l=@TpQDK?K&gsn8<4!(-n zN}uc3ug7_6Zck||MaLG_Q|mQh1V=F;FjK_#bQh;Lqe zxgNLQd(mxl4JA1_*{W?A3^TK>13{`qyK1%3uatv;LpV!VL!fr$g?*n3s^|gr)SjBY zEN832iOT4|=8PKd%9~&CEuDtwa3_s3_TMKC517j`gR?Yt&Sf7zt6_5U%%D$I+Na+Ev6VM8FD$ zI^Vj|Zw)wYYP<92d+CJ4Bt)EStq~mYCD6ojE@nES*AOsb^8hR`&#eO}k#a1nXei}q z{eJ81^~J_7|N3?F<%zxuFr~T+os7LfJGS8)s~}>38yUF{*u?R%E7xJpf&Tbjw<3Rk zf8ke-Jpznq1;mTHZGMz+;scIc7#bN}l?cFvZ6A8y4~i@M`Ex(xC$&gFlxmv$Nixol zR_|=I7fAFye=>bWi0b~_vVQo$Q!Z;jQZ-;@p^RqhjH-RJF zBe-?&P7l!etn#0VC57|u-Mh_zf8^9E(eXhisB#5$E(`lE8~P<+I8{gu#t~miPQBw7 z5?YOO-zxaYx4}W7r&+*WxD|r08o0U!crzv{UjLb!3!a7s?Dp!y*LoI{dyAZhS%3cg zNr+XgBn7iUKdi2x2D+JgcdR9WqlxQl+4Q%^uAVnTy6tfo(~ zxuh+LAb9ZkL7cK>KIrcJIze}@TP?uSC`mRUX)A1B#SmzxjkM%s2cBa!9bK%saYoq9 zn>WSvC2IY+e}LF7*)$RBZsL8AUyx|IXM_ZjI+s68H7j{+e_j4(0B!ul*qGL z&m!kjvDpiH{RE}uc;Nze18FQw0n(ip)>N=~L-#?XA}DFreI5fDP}$nbP6}t=4H`pZC)YN|SZ_;rl1FBpRO?r{D!$+EYwRX7V>emydb1m4ssR#mz9N>yEbHTFH< zrLd*c(Wr2efF2ydLbgI9Deog1fh|C zyyw?R%&$Xn6N%bMyq3^3PIBB;ijd6td40{b4XxO87 z5<0tb{1@H#yE6!#WXy~p^w7Q zs+vns*?q}QHe9tk0C)Nu^j{eJ68{i3@CPf$GIsDLCMH%!KH_-BH?r3k2@A4G<0qfm zjtCsr&97oP+{Uf!x=PJ-RFA0Z zMW7l^Q4VIz&dw&oTL=NlaPtG34K|Gp(5BsVi7UZ0FvfupbSE=OEk9NwGW_WPS#*4YZdm%D#mnE!o- zSb*FMv3%kLC|$3%vv>&n8h*%2>xk+oz=}o9rq5g-VUb_?B2fNkrSL zpAGzjf-;AWD_M%l)N&hSIM|ys*6V?@tsFNWPadXm9B5+R_i%Svlam6Zy`DIq~Qj= zoE{6a45%#+Lh9;oioU>#(XKKzJZ5C5I@+?u`OLBI{T{Q~1&R4{SR8&jxgZHrIGMiM zzj8i|z3{uSuDbdjVK`?l{rYxu zbT+&=OnRQRyT}8D)mnVyz7JwtQE8m-AM$Hl?Ag!<^c4o&Wrgyv!0T^e#m|GL(yl+= zuL`T7=?F`Z+;0CD>M7{yeSCeX*+SoHrI{Qz70`YxGOAPCecL?uoo8&*bQv=>OwP@N_?kMXJ==~x&E_;Lzai;(Eg)F z81aKHhzEF$^o4=fA|Ptvl9Ss~K6Abaprj{J&M?bv=64mAb@ivC=gyrYA_NB~#hI?) z7iMQ00%DRs*1dkc?#PiNi0!)7jqk&+-e5yIpBekrwvWhX8yg!DKdZqB)498-Le`4! z#*_XP$&~I>UGHYH+L3G4bjnIev4QyTIdoqUlF+GnQ6L%Ud+s5DhMdpQ-K)ECQ5NlT zQxEc0_MX;Wzj5R7u%jSX(vJ&B&a>W9IX>Z_gdFfA07Nsvq^Ku&+CowD;feaAFdbZ_ z8Fu}8EkeHXy%tnyLA_4jsH;!`g??d~oBX~hK-{bbS1g*hR=m~`-C?)k*fcs|Bj50F zy2nqRsHk#LNY`w2#XZeKXvP8(Fm%urIKcS9^6VVN zYD!UA+0V* zuC%{xZ{#~64pbQ0X&EXF4v7kLoS}7ifP26$*VNVz1fTNv;~$d^GBq+=qKk@T!`UP-vyD(DXvjQx_fDHzwpan53pGTF zj}OHv3=PEu#WKf&5wwkT_r4Fp9(spiZW!lLTdP{{BU)^RwV?v+$54mQ&_unY{M&3B zeM6}Vj|SrzON|@qms)eIX+fG;oH`YV*(jVdqg{bXN!v(y0J=&@*Bn5=WON?SDAZ6I zmqQ)t`0g#)SMxZ_vEsn33+zE=8ZCzdJwVVrD=zAj4X}#guLka9&g{Jdsv-0-*3tBy zM^7Uo>7y=jAr|qhGizs=Lc49v(K6g8UU6~lLWc*8PQ5L2^Yc9rp}LLt_)BGl3insB z;lx(}bP!Zw5|ExN)_&4dVGOZ7J@`k?Ye5RK!j-jbIF-P2eVc*@8)`*rU}PQ>&Y7R` z2>L-a@iEh}xlwu5u@QiPl@%3KNYT{y>@-EiE!tH|Am7p|3b{gfDH#akYj;ccQ6*6AtL_IkdU2Sc8j4I;l;hy^Offh%O zwA%#{nsME%60x)K$D(EUrZ^r0;0NWivaqm>P9cNw#1|VsF<5DTbZxFflzJ&In9V&( znJqndwn9d^d~DXI-`%@fp+AI!W(?FCJ9g}VJU~gpNdEFfnz)B;Qz9qm8X60!$V`Jw z|FW|E+w~t(YT3Y3JU$+9BH#8kD}*5LyQ>YYj4!nfq08(Bc64E30S9wWUg9j??L9k| z9F$PSR)r36c;O7Vc0`f9+kiT2l}_Tc1B8o#s2A3~6gGbTFzi-LNVVk2zrY$o#?OTy znfC>JtL8Y`q|K=jyHTmSMPzYtksRpVDI)T1U?A?X41a@Cz6ju#FF*u25kScJ%7S|d z&3n-|1+U3Um4t50(|WG{p`j2k3(4BaijGcBI&66ZO-W)ydw&1YY*jxom{*7DinKbL z6VZi08uP60SyH4ftBq*2V!v(~ZjVAANn`&}f-OjF~Y}t^#zE%4Pd6g&uRepnc)( zS%}?f#E3ZLo1edLtAa-m@;DJD@EmY6wSHLbG5CshDUoSjpsKQx90?2Q9>Ee>Vc|x_ z$Hhefu1BHMK8oZ9A?7-xShWft22I#Vhzn^IuOTMa3~BT}!MYt0>9jt|d%UND4|mj+zPe z!y2U=fi>lg*klD)W-RbNB94-i5I;sE^1& z6$;~#`;BcwDCRKVp(I}UF|c#RpGg@9oG$_f=kTD>)YJq8VQfi>^3|NI^zOpKzlVjF zB0`#VWlM`3ARIM}UmkhtF^IE%zPO*{#}>G3O^flK(nf z+o|j`j!XovQ3pNX_T|-kD?p;O z_!gT&1#srXz-`S18?q~}?>VdSe&y5lraRKS%)4D%!kbQyqgE%1$}ow(SF!7W4E64u zKnWXU7Pa5o3nwg;9qz5Iu08y1rXA(8wE0mhKEQls^ud*{kmD}9PrfN92ZC947_4^n z0-uDl3v9;(9flE7LkmdGuR@s|UZ{XmP3Jy6J_u@vaHHgi4+@wH5Gu;-w~U0GzZo4t z=#Bt_S&9Xpj6w$iw*oo!w?Sd=5u2B^XV7a^wo5BeZ&jDQ zV)Fn}s0AK7#5r5{DM@hc{h zVvCp6*MHQi26HeQSb0Hb#+B!wbywz?TRo*g(=3s3uKWBpcJ^TKEll2jr*2yPiH?c* zNcyr?n(p|hF|4~1HX$O0-_Z@uVa2_!r&uX8RZN`62%w*5GO>LO%#N_AmYTASjUm zP5X;_8`fgcKrFIxGY;J;16bUP*tY*Y zc=$7bSD1k{I(igAA|3SxCMf?^UbU8)i{d^}zVvoDCT+v^*bwN92Z1+~mGzSqS7Bz# z#*Koqva-!v(I!bl(!;@7&i=OvH-Ul=fQ1PDbU0?$Tz77LL{038;JMj_x!t6+MdK2E zLO(Q99!oW~5g-IvymCcF1?JAC3t0~qUC$DO@`U?^@!`$k0pOPpC@UjYf7l^t%lixG zfo&`;52BZd1|jEz(_QG4;(mv9^$k}MuhMsHQjC*E(v@SXflR zjD+kmb&!&hqSvvzQdC$t)Uv!QSHEve6qpl>(l)q`tKkMtv6}jWowMfC6bf4g$Ck#% zBRO?u`vN|JXv#*6gbryn7R!MLNACX4ZLMc{|D4R3MLRXP)2YLy*m*eai@-Z@y{X6d zT^&6?+}oR~{-Ol>Pd7I=i{FFIR_7XUeobpqm+=NpzKnw~`ld03cEOIu;dGhr<45i6 z?6iyBoVF-<7*_8K9_6?>G2Xbx#)>l=><7+gR3i6IYOD`_Ied9EqVuwJ_zP*QEur2IICadNsSDK zvI2btC_vb>WVj@@IXRbbAHDtjJtsMCcJK#6Z9>mH-@rGVV2H;lzjvb^a_GOP6ciNr zNCc2`O4@9-?(cut>+QQlx6K!4&{jem{GM8qM}vl-LB{bKW_9(P;lvN&y!R4X!#FZ_ zooWn2`-T6j4jD)bVHIc!D~@E*0D;`X)`K=fCX$9@I&xD?_O@K#&P9rt~1+~rVIJz(i5)di$^z=R?*G^w_ zayp2UyezG|0Xf4#4FZ^}Zsy-Jp&Zc*>U?Qr0mGIMb&76B zGZ=6Py9FmltDyfO0S%9SNaP;W6ZS=OfBy6$=#9r6KHot_0maW^vhkViYZ`nU<-$43 zvr+nHmO>wFPM;P6KP0r`MFgj;LA}zUuM+4ABZ9F`6r65OvH8p&weUGgRV281&}BV} z>DlRD2|-t4*Z}U-(7h+;&5FJL8fTRf=!BXcQZ#HBXq7a_*yZHqRRps!l7+Iyb!XvL z(+gad?mdg?$mKOCHl0R0PR=z!kH3PE_Y#0AxiaMpb=89S7dtVO&RZ9F#frpya@AL&~w&?hDua(}Jm5&qNH% z#ta;~|A^CTMMXvNF^Aq9ZJ)-;4>}NH^lWTw4(!%YBg-SsArOa6+`$wAWzuN=R1NTK zjae+f%(UbvFIgLl8QA$_Gc!jgc5CR;M3mt#JsC9LzKiFTbgo0qrE-D9u==pJ4D~~G z_njiZoon0Z|HS}azq*qblGIY0$*6~i$1+**Vee2`^8HecROdTH^1V=D2+6}hiz_zo zwF^SrPe!neSMZdq7l!WPEc>}G;S0Au~V8ZI%=6qhn;j39$ zS@j|NTt`gx%5wQ`k$EZr)PCqfq046J;1Gd6B59w@LJX1e`Olv}sVIFyxR!uNs=;(; z+jq!7^=V`$dC}Rq2ILdd9zy~kFdnTI(4!l@*dcOYi>E5=ce^HMSnS4*u=|9FfAK;R z4RA8(C#R{~!hT!^GBV!v`XKCA(wB`VZ1es-$beC1SvTK?i4}_1VhEp) zvXYRxmL|kXJiYg^+;}D>178Qebgl!1PDYmy5IVR4s0a(MYtY{!_=ozBf*2-rI3Vy^ zYc%-b!A9T!YOXV##&|e5dCW)(iS_BoSCu&ONmZXM#Hev$dCQ>;-3*n(N^7leDpl4d zu#C{P6Z^=yMHLOU#yirLOqs~6ZVR(H=6?Yz)bI{yDWViyZ@;4t?5&C0G4d#VF7+SL z#7FYxDm!huQX3z?=V8lPNWa;z4i04}fxYIn+Hb(Pu6nldguf#7yg(bqg(~zEYXs5{J98e7OCRIL$zJgsRjZ>7@eCvOG z`OmZn4wHuBOC&?poU+q;J)(?$n$FF%4Fq>PJ-W0s%a(>hKVHW9Z1k`v_9r#~f3b6P zC917=D4ZbHS`A(Y^%%>$QqL<`8o|3RSlxE_3kV=37xWfZriM6Rn zewL?dgK9>@DdzMCe8e{(KFaUoHJ3R+Kpu>mh_4Da!9J=*o401|j;;W<&$D9-a~CB} zBLWsxsy}KuYs=NB&nG=m;ky%^_8j*{c^)(<)|O{)5~KiHte!jFmL~!&_wPiFS8DTI z(zy(uFN%VFLr!4ZWwRQQ5WgOB?;aQB5IZ^A2G-0^#|FZhlr34OFqXWh_{kFyaL0b2 z_Cj_Q2Jhq>AR}-9&RLk6K^}IKNlFkO6R|hur=76u>$!S2eCkmcA}g?o-_2_9wM-=f zPfN+NDE0aqf;=MpO1&e>eas<;jERYt;3WsBSdAgg6|B8IE^;LPkSoNn*o|N@Z5r>e zWA#)6C91Gz$m(v=3)AdPLCHGSeb7?we9I#iJO>Kbxc?NcftZcp<`O{==7Bx^?j*XY znJ>DJP{+z({nkL{_{cH8pQ#ZlKGR}129$hEJ01X+?v;xClJAgI&&Ie7a9*!q<`kqV z-WVoA@&*gbDhT}SI*Zu}W%=aE`CNn3{OSGJQYpSkkf&B!tf2r%5rI(!n=gVRKsJ}b z{u{F8Z6H75e*)d{c3!~Jtin@dF?!f%ko%Dz?Ovu83mCkFa`kmGYHGa0)X+D_yH$cE zWTvL;J)wTy^Ah(*5WF+L2vnE2(jC?Ytw6*R+#F8U@ow(!WNbXiAQ0-NM$!s%WYl5% z_-(Q!Enz5JN>*~?LzyIgM#`rCn+c=1vzMVse*zhPq@(;FlXB$1&?lprieHT z@HDGo*ExblR?gaYe+1ie`{Mkt*cMqAEuFxRoEf3gb@!paS0NOo)grL8${zujU$}pc z7;kV#!PA&~o35)mpRgKwkHNdV7d^n<+3p;fUiY-#_19N_z?x8&7J%|KO`DarN(T#% zfdewC=E;T}h{$GMoIQqw7 zcA!Le+7}l`L~KMkMF?QRxXVVqlNY6pJ)?A}&-W&T=f|ogaoq1vaqD;JL^0cE9PReMP?b92`QA-(4qm2?CLjm%p;|kuONeB$nw3_^x>zek3oUAyaYOnrB4E=H~~_W=7p{>Yr{`4!CXK z=+UEVICY>gSE5iB(qz5)sTWSq2s5ObV(!W3H+Lt4ZpKkwX=>WWJ3J0Vvy5a_P?Pjq z&~&sK)RdD8)}?R@iB1#E=>``U`KEx5W6wWcWtlL$-@Aoj5upm-|EGm5D?5r>U#qUM zu`v#=Lp5F9F$h|@7KV}U7SHWo_5QuJRAZslcME&#Xk+(l)ML#3V*L~1^fq8)+EV1O zm@wK&;kdKNmr2|wnaKM>kg8MXmv|#As&~Td$;_YW!^SNH_qls)>@gzs5^DxPz`z#T z^14KIXQpI)uU+TPhIPH?>w^LP?a31o3Q9__Bq#Ko9M`(pD1?Nm*Mn}W#PUS9{{AuC z^ZREX_>_2-aWM^&rsk-PZ-QzDR3<0HyYBfo)Ftkt!5H5cef8h;J^uDX$IU-4A^#fKr`nruH1wgXpzg*VLveDII#$afy9Z6pUO6n$NE)f ztiq$4B|6cWt)-wsHSO)~kuY=Vdj9z}_rB51lFO8y#fbF^L$ze(6gXKghO`BxmrO~5-0>r=tKB<}S^^^0*<8U9$JbbBO{$aL$$cbX z62uqNK$YV7C6$4!JaE<5*RQIqoG>q8|HY*R6S#@`aiwhi^J^r8_4I-F>Ym)HzBxb5)M1|c zwuUWxG;CMT2T`AlK=K5QnJwT=ud&+?<2{-L2pvtq`;f<93-uXCp{f1TQ%Av4!LpN^ zf#na)kFyh+lh?U)pWi#ec=G;%4r!abO|EpTDU%ShK z?{?QV58@(~?enL;B;q0uN;=Z2ZLSLQbCwv)sNgUVVl>_^zNXo2nj@o*#ntVlE!K4? z&B>#MGwVCF_rNkcSW>f~IBGKujt&km4x5RX_>XCgUL^<6XpiQu;D2@c7kT}xMeILKLrX+bvn_zV! z7&EOmA4Va)1m>gt^4<@FT@{+fXrDA~a-)6M7wsL-SZHr#F6Djdyn|g8qxkl}`Epm} zoo~|Y`&kaf??XTKTRSvrZhmR#1GB-=&1Sx$q2*LV z27#gRrG`*-vQ) zuOFW+*U*Z*PB@gZdgjashgm^tR<5!=M_X*fc@1deNADKHH>=!&-FNl+;jkI95)$Ie*Mw_DXSiE-aps>B`pIe-nv`>3W&A009+qc8U zNPqyWKmYua#*!J7tJ;3h@f@GqubDk2Eu_lIy*Xwo--fB|Id1|6qv$v>*WuDaj7*dQ zWV}gPxJ$lZF`6LbE@LbuU?U1{9}`s*4pJQ0J1cPm`KSSKBP#2$#E zwyjjfO+ZcbtMSn^hv7pdjuQyTLqM$iGLO!$|K4|K1ocv{Ugd+*!qqP85*pVzZNMy# zS&tq*R3Mn5`-fXCP^|-!m0a%s#|QhkiqWE)W^>B>k z=u5Mpv-sF;#ovLhJBuo^(-U3ESWaPtyZw+85Mgy=W59@J53 zWwB0t9tf^aznKuyA~1+ryA9S4yGzT1pT$tw0w$Zk>~Igz#yj*fGS5o)2@Bo+Nn;^d zhSdC?11_EP125EET61%kMI)UI2B&{O!<)T%Y_5ajUgXNsD1CC#uZvjOq%+(|TXMSf zF|ixA$D^k6_N%*Qxph4l7UdaMl{uy_)1$m7+1vm39Z(t-a8OFd$fd%AjB_oUGg!15 z?_b?mlynBJ$rV3~nBcdIYb7AT{$;!CG^R?m4Loj$Qk!D@iZ$8`?pME~z^!?bpoTW= z@cR{^+DF(9dg;gMJA)}>{hY(|MxC91bqJMK zumVl0d%z<~eM-S}w~Zx9gPWa%oKh@po~FVOr-oUlgsO-F4O_q6qAm(0KOIHh5$si~=CLzM-S4=1~1M0D}jUMtQ& zDI74M=059-o(2bI2ip@YYUKH27&W72x}%|U*}y_`#JZfCSz57313sNU`stpCzNUA7 zw&G=i%>3{8MyJRvm#TeuWOl=c6Da2%8RwOJ;RQQ^P^biUI+?b*dK(zff~6( z{d-PiwU?ES18Ld2O?*T-q557u=)=&Zufj$N;L%$_Xm<=Y=TVvH^5y!lEN*w&U-7CD zbl4|)7!o8Z{Y?I&vP>sfO^toLTzMIP@5bGr1N)F33HYe{D+XLN7OFUU7|wa+(0^O{ z%i-v~yUf)7{!~#>(UfuvF)ZjwIGz}^vP|E(d|6vl6Fv1A`xO1VN5>rU^ILdh`;?B| z1|A3ZR+JB=1K|hTB8%|%b3$xFhprEb#(Xl&+aFKa<^-_$>XC646!?R6Dc#Rjp=+nq z7xGw|QB=B>^ZZvzg*g33H!etCKgmRN{bptpO#J+~ni0zaMHQzwFVeG#X+s{Wh!SI_ z-Q<}0=u)Y#Hw(Ee&G@iQHPZv&x7XgSxL7HA)c!_BQK*s>J*VbIMeLi2<6by<<>h}v z{tqK?C}VTwMH|}x4VyRjg$5PQ(NcW!i9uJZO~byCkAa?9bl7HQXjV>e&ne2227D<0 z_U%Bw>+cQ}hjdzqKtx+tE9rU;?GESJc*>VkNHm3bSeL`0`1ttNXF!4F$K#gIyQ!<(C>3sowIs zd75djtz+t6HL`2`{rdCcH&K(R!e4djF~lrCkHVwi>C*!o9uv*X;EkgB)HZx!Np5B2 zG6By?#o5MVVc1$sq_L*vJd%W?ZV<4cX!G8~+pmTzz#*N>vHuGj@;wrqiykX_+{>!h z3AK0_b@}2+OWS>%5I67M?F22WGHR1k%-If|REKpvYtOud>4%L;E%%GGy|~mer^CFL zk^8uAIZ*pFgca-PE`*VuxYWNERk~5P6q7!NhaT|yd_08zL)g^&zr_G25=7Qc;`C7H z?U`o3kZ_d2$wF#v=WKjV+tp%C+ZSXY2#w#|Ooh+hqB&`I?(DVU%FWkT=~cfzX1XC= z5&XV&u8Ihmoc+i(MV>S@i^T1^YApjRzYW5viFrr%c%u5pS2wyq*s+)WHqvHAjoxz6 z&vodAs(kIWgIYN(>uX@pl{*^KDQ{)w;TGHn-KeH2*CL9xA03 zoh0b=XPf#Icp!sZ+;?6O5WI_GG&*AJl> zbki@1IY+$YXh!@9pjDXWSd0vRwv+U(mTVQG%U>fx#1RPli#0eVTvl${)bCXy?w!&O3$;N#)k4r-^3+NoC({Xcs*`QH9sS0UC#64V`d1<#r_tN6=ZXxT*?-md&n|5Ey zFFF_zcPZM*{x+I6P4D3zW2xLZR~+B)os`~k5(H9KbZ9+^OEM>UI6ssUap1yq70|%l z#I}}wRrsQCEa}mMPaO8Kj@>BrJA%xyV&T;-)2m@87KLf5`HH?4_u|vUV@BOnRQza7 z{iQ0X;M*>?yMaLGRZU?gFq25^5TmjAzlN)_3R^t!BZZC`2(`~)zbWikHTbBwl`vDX zPNk(dGDW9@8e(8>e=ymwxt(T6FL++Qq`j?!1pxIGKc87By39Yvqyi?}EHzr%a_mAC zhhybv^XQ!c2DY&7&viL`rt|U#cnc7$1&*(2VWv08V0TDq-pNA8ik|7XfFM=Bk)?A_B z6(T6wBmN|U0Z!KkJ)?}Smy&~Sn1Wz)hcoU@NDS`4AD zIW-f-hP;xJ_C3@+uhFms+!-#iq0uuKaOf?;wI5B1?tk*#{wSH!`Y~t^=NMk~uy0Y;B*D$Qyi&xlnSB;$ zp0*}h{IR3;XA?tYW-nk4zRWb+F=)t5S-)^&sC>ed8q}qPhCWvXot7^IOF8>{f~+K0 z@aJgt{67!T58LwKaW7t*7$A;?cPAo*Xli7U>(8?}Imb}L-TunD(s^wUE)9FCefr$J(3PrQ5c>35%vN^kcdL{-)fUm-9b&4Xj z#3(PX4}?bBhEn^<|Nm>-Cw?dyCti}1`M(spm&G^#{CNv@jdx6NsQcXNu2*&OeJ z7OS|sB7eG&T-fyecnkzsRBWZ!9_@t1J5D)60M2Y{D}Wh4zMS9q#kPHSQRiqX8#c*I zS<`ktbdc7GixN=!q!V(}Wf~Jekxp*}0%j;hPe?A|r}q1>B7LE*T5UM5Alf2SGiHzo z5D_#Mx3DQW%{HzLhTFfr?*WOVSNDRjJe!3>)Av;b8gjdeoM(skpM;2|o6FMKreD4w z|?#UkoK)?_r&GP zLd)b^pwqUxV~*yZY&TG+#zx>W=LZC;RNx?bykPHSov;>EC0_^c8SsUJr(^3$G&_nx zp|@oBbB9SgCjA$}Wl=Y5N$x@w0 zKHGf9Zq4$n<{`au^Jt^kZh+$=7`TUPaMIfIMNV-|M|(&jJw(n9>k~&L?1c}~gUa-E z+x9@n3dQ#O+iwT?zL@)W3v>}D*G=UgL?E}yb!ZBwWE@%aPH^?J-*Y#0?z6omHfWVrxU(Q`6gf4_k>|+6X>#};d!OzGOZ6H z?wyhlU8YBD>MQs8^#`)cml2o{#0PKhe3)jP^H#Iy-6Axne$gWD#iwVj%t;Ot7RoK` z|E!!_+zCQJ?d|O?C54sSo6EN2{lf@1r7S$==a+m0>#2M(_D}Pz)2nrAJI=@#;OhgX z4-zgjw(MuaYWMk*Xx#+plc+C5y)6slY~GEPn)851Er0ePcU2aZzVh4GI8hX5o}E4A zTufi3c7`9X(idOtuwSO3^WkmQVss-&wfsVP)U;V_nobM1ae)h@hbww&0ZMU&4=)G& zwaozGbnLTzZoq(!8y1RI|7_dnG5E2j^vFO{kB`{$*!p z*HylVLzxbQ8eQl~d3jp$@@rpRKSIH%^#1 zYG&&CB~UU@HsmLSSuL|WksayNTxe+>2)&6Ce=kQKNxs3`e|{Ko#`Xm8fV7`8zr8>R zF8TH+kcs&lPHmT~B64Tgr1Ud%(o30hH~m*-ox8sm>$sbYtN}TC+~xn=?)tfA-WZqC9Rlx zM`?thW@a2JN~)?>WPDeSGTplKR`n_9OQ>nB4VyN_(PKWOuF}P}7J-CW3qsQ0k!#4z zOt|`Zy~+?tOmpHM@T=LT-e01g{(%i{ZDvNPcmhw|beO`gg-_1R5>yr~37}fQJH=QI zoqrxc-U{Hup~@8pqSR*;$UgneQA@KHe%z#j8Z8nfl)qmMM-5p?gYr%&6zpj8y={w^ z!Nll1**Rr5TK*UdSuEm>S|S;6G+b;`UkzhqW`?7pPj1xAAGJNp*6|}zi}vVYiFCG@ z+2g=>DztcLl(fc<9h>7SMLP)&cLLD}bSN0bN)}!tE)PvjAB{T?ABL$oHgcY5YU<6s z7*{0H6+(xun0k@WAvp9$w3?!03fR@N<)k#zMHI2_g!}nXvGjdmB!T4=Z4<&?j`T5O zsL;#=8O5(Y1cT1;)Oph{x*%3}nb$jC=s?yX@SY%YhcW8@MXHMyps5X?Ms#g}#qlI9 zn3U9pTzt9D_RopCUh|q6+8t+sQGx@i?cv4evRg_b`(Q2E=cuig+RJ z=)p^~A9$)bw%Lh(`81Nr3D>zlr%~RYLW9Ai90fr<%5?5&0c)W1w-49U+^}H-fv?7J z0By#pJk>s_q4B)@1AMA0zqEe+asFV=@bn-|5-R(ElXdUu5ag`^Q@QHd1r2$5;+zlD zyM%q}tFSSo+vm^+zr3C%6gk!KU3oC%SpXpnn|I$*J8XyH!wH|d?CkO)bpmab>BZUS zVE!>yKLBuGA%Key+x*^+Ic5s3Ukd!KPQ+ju4<&X(UVb>Knr)mlB_q;%d3t*K*ZgdA zoVPL)Xig+{F)i@LHMhj9)xKRc*?6W@(ZWb9FZJTOr}5n*#&c{&*ql4er4qF6)pa%n zbG{xA(6Y2=oZa)1l1Fd}@hC}!I2$nH(^P|AJ$vTAdUedtK{gt+X<`pmC;)3@-yA>m zYyPjppFft{Ny52Vbi5<`O^0<;hDPmgDQx4dmx|U^9zj2j20+7ay;jut#k6o#Mtq;kXSn~ul#da z;}uFl`5|8k!x7zkzU>oT*YV|=^MX` zLE@Dpm)_hva<>1eLwZN@>K%iGbi{JY6w4u!*(Q}d(ruWISjG$kEr-C=Tpdk^%g8?w z3nLKIr8-N4G$@c_)^=KU;!$J{{frO;lPUG^p{>RwKyQ7(0Ydu4kOE}8vNzY?xI}67 zkM`jc-7G1wKisiPmptm$2b}x=TK-m?h~|jICD=Pc*K1x+yE?z&<|{ZnF%uzv(JTk; zf}&n;BKD=`Ahp4f51~}HVtjR{X{9{W2MV+tB*ej?;{E#|$XuZS*Bo&2(xst9^Tec1 zbuh8jRQJEK4^J_xl71A#+_`Zm?Hly`FsBDnI8$!X*m-9jmiW?QSF+hAj@_eO{k|;2 zKF;v%4i3~=OSe4CQM#D9>=OSXD)N}SuGKT1N?|5Y=d1OrE!Eb|v-@7Y0fl=9n~!wK z#6us+KmU_$nKK-6b|PXk^Y6$b{5F2-G2=H*F)UogtbXlFOaAuh9Y%(YFTZ=AEni+< z-bcZdrra)3&N+_)yu0d|DvILU?5wH<2>h#MZOw?PF-St;*?sSLr%o?X$y--4iVU-)0YY)c+zfOVducck?$R1xfYF!;yl(4>G%uMogH1Cd@mbe=Gyx`g*61DtgOZPS*vB-+m1O1S>oh_^Wo)EoW;5@Yb zwmol<^>lEAv%ZWdRx=}XXNZ0u8GWniQ`d7xi-9*Cg+Kilar3G8DGC=Y4C{X~Y@c_k z=g;J*JL^rCIS?b!iJrZ!qa0x~<|y2}4+FL=sOZ#xXw1Pbf3E#tF_CB!(eNH>K0leedL&!%Qzq}>}c5z&7wd}YR>b>&RWBg5DGo_cQOuc{Tt-`=rgT9 zw>qZ1EN-S73Ixn(pP=xCni{xFq-Hj#F8doaiw{!rvtARdRh^BscjWe8sZj=majJ=* zy?*_LqiXA|nD>`SA@m8pAx6wL1{4-!82D&`Lmpns`h^eBfgkHI>mhtRUJByc#y#x2 zof?j3K~??m+Bfmt5lH1od3BKyPIw@_3}J|@sIK-A50{7`frmD9Z54L?h-KJlYh86; zk=bT2Pj&UV^z{|Hv$jP@WaiA7BgVT#_+Ja2=U}pb@FHP4TY4u-o-3btq{K|+#<(!0 z=jBZX$#<8%3frnZ%cS`RfbKpxl6Iz}9OV#(8T6l)UfRSAmu^*vznmXTZr~61pK&s1 zf?JL1loKBvhJ!$w;<@3tvLj59eullXlLNLc^7pq7YRm%~^y31c zGtnQKnLjv-maJVHEU@*OQtg6%I-X=OXp!6kZuO|-|PMr<9^VR!$`KV(phAGlP< zuy@a4PF(?J(av-3D!aZ*c7`>Bz!SpTAR-32_xI=456h0=*;T!!p6zcN*UoDHK!4i2 z#n74^u15H-_piF)KWxjF52yRY!syJzb>r*J&X^?2;rTaW7siW`~`e)j?^L~5E(aVg!tZ>Mp;pb%2 z6?G1)zCSQ0X@Vaol7NWaY-{)UYq=Qis(IX?Prta8nVj!%pwk8XTj?7yaHsYpL+#q| zszTYZ-N_4Rc+V)fHR%ht{rZVo>1zK(HEq>qlfBF)$mA0GdY&*HI+E^=vSr(`IEmCf zziTT`w~&M^a(Bt17wJ(Pv})&$rTpZRBGHeL9y~bF{oP}88s)_S*K?FUM_+4OL~ax1 z(?m9J*%bxxob(bd4gParNz1Y2o9UZGxe4*O+lcaxah!W8&kBe;b?G(Db307`3*dx= zxtDwaStr0!^qsQctgYoIi%xh6ow#3=x^^9hYC4(~{s6Us$Tx^UD-5ec>p)8pNOMfT zscpAt+&C#oZvK-e`*AwgVAr9K8luYBP*MMJd0QX^k73_1qCmMcW7`2>+zFJLLLqqW z&~0zsYU?nAll%9jN*#yaE+P{R1tC&`%2a(mRU?VNIalHDA8}9BAo~#MptKPPMHM5p z{A))tK1KRCG$?^V&%Jw6dk7sR_hcG&d)E6tK7iBABL$(I5@xSHGbb!6q^fWabw69} zVp38xfK9+_hzJgV-aXbhn@kikb$NL@hUrA5We)lF?OO!B8ga2I zFeXCc#DPvylIn?4+fS~kB}nr5>(>)hr}T`L^h={t%(^~Mf$=ZrKM2{r4Y zl&A?N%_FJBDVq9%4irMqXgnEjTBF2us;(0pv@)zk3`KR&`9cv=*$fap9e;)JfUx_Z zScE)G=mJINIvqP?y24RvR53oPSR>=ypB@dH)2M2QgH7zNv=L`bmgy<_?TL@c_z{ex zL9U3G7BoS=1#888-h1vc;T-vwSsHLNJ*;up$f{diso@kQdO#3T9*c%Qbs8o@DqsZ! z7X|C8cW+~r-pUsh_4WIxgvTe$7J--n8^yBZSXhiAH+`6}J)?xH;I5WZ_&69tNm!$~ zRki6;)03274kcSzO+uOGqJMrWKhWs2gPyxW7(H8Szq^}Hsd@hd)sm8X z7esR<^0>iOIcq03nDA_XB?XZg(mkxvNB3tpA*{_lY!N$K^)<SSd9_-q6n}OOHUADZzauQK@~F6x(xjoFiwhuZqFqo%v1}b`w+IB3;0THMlDO z*&V;IVy$7rW;SX;KXuE)%6`Vlxc8o5=XdK#c^}qrEh2b_35w41+t~hIkVt_W0Aunv z1eBWs@nrxigld?|$PW%wKM*&KZh&f41QiOp1c8&3!|Rc(e_It5F}1E?o)oc+UEAxR z?9`B3oc6nj*CFg)q0-LuJyLON;^tTb93m>$euKR7VU$pdjJpjSa;;rsCn@^Sn>9tT zJ{#sBAqDH;==9^6XA*8EbXG(jXZIP3O`2I|i&bw#W-G0~mBYI=?;C^EpytSkY)U_K ztB>&50n&P1jdzx}_6BegW7-^)4TlXYwszK%4A%|qG8Hk|Fx6nYBhIKKc0OAw4^d%8 z4XSjuF>Qmkg2Kpe1#MeK+J+L2%bg#9BO@)v(f z=*$}0J^5O<_u9^^F}Hg4>Lo;C@?ZKRf8a}t*oY9$AofqHi{t2R-v+uav<@3+onRd2 zVWF+Ck${EeSy8jvUQc`cxAhW3oHB-x$|oKjK&}{D1S;(pq>(1{GnO(c)px z1&N3G^(^5mp10g0H&sKV!q5(hY*(eXay>@TT8q4(|NgYqUam9p^ODnh(Py`t_5i`{ zYXD1!tU?u2%0sg^0~RJWwwkhose?*E5*ko7u^p)eyj*tG1FCg^9dC4b`ZkNFoK~|%4UQOvyT72p4vFK z>FQ4hjnywIDxz+cD_%7mn!=m=K+SbuYWN=Rp>|ELkcDg4XX+H>&Q~0{F3M=*8@Ucj z{rimig*>ePJvIA%`o2f!rnw)I-I$X))W<`FX9P*GxA@zwAqC<2^Cd)D$kg|<9J~HG zaRT8^*TAnbf#p%WWU@vHtTHS4)KW%965LPs-rIfUN?<3CMtmFeCZx;4x9my5m{I14 zBwb{GkZcn}HO(7twEP}yet(c<&l&rSDGx)avdGVQmy@>*h?8i@_PHv!kN!^OMTW4O z;^i+}^lY9OWqL8U#l5Ftzka98Uh7&uls);R*ROQMNoEe6<7{qQi(P=u2B|QpaX0;B z-@YkAztg&H>G88J{%X_qaKvdPhlqslv>&H52~dALS`4FWB`Yh-B1IPN(&8P`zV*ZX zsh=}bx*dvL5T>OrWw5o;2|)pJRhcMEo#V*R?yof?{!o`0wfn&BqJcuQYO+;KiC%d< zNS$mPDi$q}$HhTH&|GOWi9$qvjvJ1=fLEhN4sq=Ky}XT#j2KBO<_yS0vC%sgWx!5^D&{O`9&ioVr}5a_Fj)+0S~QGGKiV2s0HU{B~ZKYcOP=>i;V- zh0r@W84;ZQrs{IeZ80E<;@Y3n)%dyVL0glc@$1ZocX<=i=^pj3I7*BdS+KbWX|dvj z#aiGU931@2gdDykGsjw&|B8lhvU+ZyUYp_UANcnP==7(DF{BNxWkzZQZIBcSu>nF-6A!!fU2h!3%eZIB%hALCH2lx{vad9DpNF>N9)|4C2AmeR4N2iW!SAHPu4mo5tv+f~I~}WtuAgUvV<$x^EINXA zrt7DDkd@)4ob(BKQ{?AJ;Bm+{n)}^q;CL&D;8M$#eeW7{rT*8&To}blzvx3C; z#Xnz$8shisfULO^ z^+8)krk?BHZ_a}mvVV-HMH!55lTxLd=$fH=$K^hj0AUZQypBmD2R(EV`VJ4t#rn_7g-J9>B61@H=N%p%{$Lic)ldrgE>iA|HK8i^XTz>G z_OqQ9XVTL6_X%423|rO1^5wm)^tkw-h7c9gk%L$auA}Mhdc@?o^UHY|TZeNS=*>JK+0;plI;pg!$vAsUhy9Zv{;DC*CGtmKeP7->-#fL!L4G zC`nq+nEw(D2{#iQ1g!W^N2nCWC=BMYAD(Wa#J6>%w4R5xfxDgTOa|C{0Pu z79JMP<^jnR7MGwv}8-~SaYanAY0NRwwtJ9 z=*lZZIj^v2iUd5kUFi zfBYW#5;rNfTu2Uk&&WUiwd*I9yOC8B!iEW{aB@em^C>R+AHN-`YW!_$^5<%ly`hwd z5vFocDw~&<`S!}ZgoWuA$UA6Okq-LIFFEq)i-BdajSS1+8ufY5>6D*;)OeDt|T#c3#C% z1hjKPiLiX+z_{o}Z*9!4YTAaEk&a#R;48_U7K7L_vf(A0m>fNmw7iCkA6~uCSN0^ z(+SDT#W%+!mt0;MYjo;1J}`!}B{*G*OFkB{Z%60&L2Ca~69?A~#!;*PGi(^6DHQz8 z6mIW$cseKY4-Ki$SyynUoc$)IR@kf_lgPG<*Dd1k2@mP-;2?byNr(5TTpBVTBU}K2ut}ttO6@mxux#fy<5LzWs7c`okPVXHG;^eyt4t*xlv~0VYl+_=DcJP> zGf#IF4gtBvp9*#o7~;R~(E8RVqT82oBH$ZCWYdwXzx&*Jo}x0OL-$J_NF&<0r%~7X zq1xJNE+xNcdW2W%bMCA0CvB!}WA}T5SZ5X%c7Uo<%HwKD@O#|7DUoYa^G#^<<_H!t z^DZqc#-8$7lW*9vq7Uh7W}5!hV^ulHaq#Pl{a;2o(@l;4tv zB)Ax|FQ!YP#JrEE=a2ZEb#%I!^$zfQtQc>9e(l3J|M}mo+A18X>Q~%@I0hP`*zLc6 zTu4dDV_9ZjMVg|)l1ED#*VcQQL!{#c+ z)reR1VWou$YNp-z&_FYxN?ubmi*Xyx$y`;t>4jSjR`Ff&|Cu+*pj=CN}WO9l(|al1tQI_U2=}PJxt2MXc51FJ0oadhyFw&!^kRMXs^1JrGyd z`R{RNIk07JY_|qa^WSVw5N+tX2{hO~yPtlTkBhW%)FEC@G*8H3!#qqx%vbCI_sO2j z$0LQ9qFeoMSL59<#}!{6rMa%gEMgT}z`E>qFU7`0dkCUB6hJ|iYX=y30C;v9L z>xmDRQ*oWKCIxZ_S9KOutO$ldEUf}(r0`a;(><~~8 z`8xz0TyY5WV|uy!L!#m6I<2D&q^WVG9FuwsP%P{d8O5X7lX~MflIQH*lO}|ZM(+%t zk0g1H`&M5VG75AQaC|J0`B16K_@4^pH8{W)ZU3%Q_Tz*{+!&V~P4pRJA~K+{v52T| zuh_R7y`W5D_{C54{YIvl{yjiHA89#fGhkgmkxWZXwtc^v#-<`ydB8h}jrgd1ZZh4z zLy04(oKM_q140RxwG-}VIc}g0wmcVLVI8>c6j4B1geF-GSx6Cc1J|_fWwicyzQIzb zaq{$o=m$hmBcS|Gt=-k=6YbsKi>VB7j?J4li-(*!DsIiMZDbjS{H=O^$p+7J zX>$LftWSY2k#b^$$NGxlOZ^bq9&TswirWU)cHl;8FajQ&icg2yjr@-&QJedWr0*+u zFK#8x&bzZ41@kT9SuSlRxeTeJi0`OyWqMyACv~48Llkx{8Hu&mjP5T}Me(`5Yp}e~ z6ZkDEudCDhC_-^E(nLqdfe<)^Z>-p~KW-3ri^2wGB!Rujbyjt~3ZBiVg|Mwu8eY5X zUA-GE`*3lP^K4kMr-VZA5WCX;#<9U;fCq3ZxF7GPGM(_ z|Hhswv~N%!x~g{SR5VaxYA6?37dq#t;j6nr9kd}Pm>zryt=iV7UyQ6q8@y%g;Z9mv zzm4gC*rVnb8bJL5j^FhS()y)xtlim}dZLOdPHZ{m+mcJ$s3pHh_Qa-ZrrGpPMy`&k7+*^sl`-~dJbo5|2%*8Y%y?HOgf^5e_$1d)N+Gw z?fWd#8bhM7c5+?AT8Ed@ZD@_n6vG-`dngp7jCP|@$^49b=`XAxMs<#ZGbtN`En^T4 zKg!RfhUQ+}BS10HDkIofrfVj>&DATLWbwS&E!?(LI{$CW^k>GzL4BSKo&0oiKN?~t zWSG%>DD@f#TW)?>dx2LjqJ@8mtDNd}BQ9#;s)dCKrI-~{RQzS+7C}i7ktpy@(CLG3 zd~{lIx>BRvx_7TL98WI8tjBtlj0V~6Kl+mh8ib(xHs|I5R}v9i@^6EQjqd z#q_U~v^jN-`lJzM@`+E${e!m4qcyeuT^F`g0UR1qP7A@LhyjCH!4V`(34+N{X`1S0 zKJ^9>t zyH_A@KoeXJo*py${$?UNF;ua7#hCTxMQk{K-E;sFjS+lXnXWfH8eW4g z+cv5p<(&YMm$^E%N#^NfdY=x7)3I&tW1tY`r#7q#ru~Zarr}QG+$7MY%~T|%`$L|gnb-)zU#J+kuhCY`H#Og>av^T8-+b}_a~P665Jxe+SGYx4kd z=AMf}E?c_z2tAh%5sP@hyX@GpL-6qsk69-UC0<0mG3D1bavLU&O$-W*NM@ux{d{kR zrj7%G?aHGBxb$D^$E~C6TVIu|tRAOtpKQIx*l%_55N~pXceUgK;E$(|AT2>8Rm(f? z%d;D1_-MwOgC4vKRdf^L7(sMd1b!c(T8IW~5zV5_^k zO-mV+x@QMSc-P*&*IhWmC2`Fl^4}%#J@LyigH^tZdvht1#HxrfO}e9@;>jCupf?cBbNSOZ!OX>rSOZ3{Vy%M?W2B3V=FCWM69 z`vlC92&J?$-$r~my1iZd_PYS9#3tfhX^43ReW$c?Omcb37{5S{bSd4{Dd3(^DnJSS z(!Sauug}_1k6@+`E$siMK{Xb7GVqpR%QwM&Met??-a_}E-x7?DJ@Xzv;@-iJg+Doj znc0A6a&6-!E88w*=h=orB4a+qqrhH$}H2(yZWP zmG!eo-7$U*PU%2lr|Ic3p-fo>boP)RvG&E%3wOZNLow&V5(GBWD~TOp^O5RRv>fz@ zU_P+2jxi&`qYlvrYhhy%R24)bjq z%qvyS?EqpWI(rur{a?+zN@e?JJodA17xW~X8`9fv2;hozNUAiGJ5=fvnuX2T&cO8=KC*KlXZv9R6m?EyG$1h;tGOg{TqbJQr+8^1maNaw)dW0`hV zX(Zcp3d&iYf?@N9(pxTfF{C{yIP}!qH(q`Nr4$asY<(%oh~+4v(9_3+2&eWbUNTOq+G)!V zHu0#$3CMe{y638J(b*gyCoKRyUa3eg z^d50x9l_>*uh3}weSe?pj$NBp7gu(864A>=*i%$Y(LBoKX0^JWxU>1kkAS^#qRX1x zb;nWey;!*TtXrDgUt$^++pfA?|E9|ZpdCUUuOvgBM%JzoZY zi67f<#HAzJo|Oa#k<1;T8*B83X+BGy5$iM-%i2yf6#}ED{82vp#&;>DpqvOVq>j(N zIRu2QnQ~6~qL$^c#`;(4^c7;1CMv7!*x<=m+>^tZSU4e(=%Fx@o+jv1~!XlL!8 z7>sfM6Z7F=rP|U(D__j}8pz)5<}r{-^mF7#2rI^#Df{lf-o2Yyd$jm<3aZlQNjF?GhjaosWVw z;F$F}uvhn`mri^a=MtL9fSX6qvrJrY_VKDt$=l}l2uwVz{rjeCE}WtWYX!o64MZ03 zp%ps6-NM-EG3~!0ZMpP(&Ym4WwSD4rJ--#N>af{~3xog1mUT<}n^&G|9~!6L?DnfX zv$d!(fW7VQV}U>#zJ4A4Y^;bKuZ7J6o^RGVija9Z1-O6 z>pK6bh$yb#QVO;|Q=+|G8Ej1`e< zZf-8;fUf)nE?_=3bdbFv>f*A+V;Jj|5jDZ>-?N-!F=yhS1#OvhHv@HZM==P3sj=(1 zPw6+GFP`g2G2EUdzl6RQW}u(lY_dKnO&!|4$ABr+l!_T{*hm|Ttz@%@tM)KnQc>M( z79sn<`cAt@vOU5s-?IB|#F#C5z=auUWmjoaLv=cQ+cg=1vqC3GdCRU);oS@ zQ<!{*>+af0owwuR|MRq@(3R$aQu0VnOwZ!`APC#AoZhH>w5Rp6$b!FsfEeBm6A^%8ZC945p4ZePkyN)-Co3q6m3y6 z-h$4on~WcfXTREcmUUsa_wO}Vc`bU!#zt9Kd}h|tkUmNAotNtL42=@=tJ|Lm$&@J?!!$J{q%{ikhO6jWmj6v zcRxaPlFK_6@^kZy4HH)NuB`hz%@@_J5n`^L*{<7de{?JTPzP4KI4JY+V`WqhGY?Pe zY-?gYZT@rddte}Zc+vwVbjqHzA-9)H#nZ3#uNJKtRAp%yWM1gI#bDS+i^AryS2peW zcR2cQT2@SSf;@H#tspz3+T$sRZ0NRpx@WTnl-9k-y%~u;>9x6>TB*`i-%)Y&nKv2u zBNPiy8{~#4e2FcokYNxVJ5-Fjvw3=*VTNKxQoDyeQ?7d>&+dgBj)f~ixZ=j9YR`JG z_CBxnHQQQDuH%T@M+@gtHvO8~0CjANisLhPJ#+8N%_GF(W-?}fPR%|m;RMdX54BQaeJjbsIP_{%q*ydjP9mFVRCwl-kGZWD|@f?vd zMC);7u>izyT;N#|#J-Q}YY(OMU!NST-6)KuTN-oLrJ1R-G%lzQV{qDWOrm#ld z%1J6yR)>#E&=I%1q0w}b_7H@3209IUIVU1+XX< z%ox4`TZrmiLA*hX-{&? zmhDn^r(Z4_nekAKF;5FD&wl?d)WTxg(hJTKWUQt_bDpwaBW!?rnx&Kb>``noK`oA3 zGkX?pU?KTs9Skk9w+hl(cVh?vHAVM;100sPatnTXvc#%1Gx0ljr}+_z6srwm6doNv z8&1NBuv>z`%^R3D=k#=Gq2#g9Tjtkz+*pk5vG|h^rxyDJxmou9Lm05ov%JMCSNc<+yyk!v0b|hMVl<9G9Jr^&>Xy<@-7rAXMWifK zQZ^<>f4)IS*>0MiY3?ZiO7m>9*GCO=Z+23m1#Kl|{(cup9*b##K{UB^bUjQhtpu9^ z66Za-At5Ji2fbRbTieGf-|d9=Iq>efCNUyx&8Z*>aKG8P?SEjiE8Sr#eKKct?(=9r z=g=-m-xqfQ_=Q^Az*r~5qjZTM{f2m@>;aNOLhPqJlEx63gHAMO1iQ?hQ$iL&lWon< zW{dM4>u(h>&pbPWYib`7N=M*9%I!d-lkbXj8E|l`$2p?A1>*hT5xWO^Z^q>&jwCQI7`+!I-kAJ58{ZTeWXL%<9oruciRXHao3XeDBhyZ>KTZ%naqHNf8*FPRp<@Q=Q~9m{%H|*kH;_a zmCOfT;hi{wFsPuWWs_;$BO7q`{O)cgPbmcuSApKHhj)+t_~G5V0dhJb+9a=at5z2_ zf0(C)FW}`*ngRvM6Ycms@KO<<@8bao+Kz@|57yG<_YV6*pMx}s-XOGX?hC9o?a@H% zuiRUmD%5H-uBRkC8B0l1W-2O^tFJFK@@h`+KSNLb*AIlVInA%d2RvFcKaVkU{l0wA z&W%~UUYK#VH&@6O$#Cc7(0<5s6>)e<49_9S%uJ)3K*=m(CzeQkr-19E|IO-7mzKLA zD+9Y_qah5U)hy@6G(w!m5PCVF!A?>hRU^#@dKO?}*KTZoVz)hR7jA;EBxb zhP})F(!rUOlSvPkSg*J*dlr04kkM>m(4~a86_Pd244zBkq-isSVH{hc5Q`wBXwOAx zb1sNNTUqR|f;P?FY)k#ywd`0hr@=dUo6Ga(2;)@DHVnSNS=c}MurfL7JYvIAW|Y0* zv=)#)cC-x}vbc!wS)DR4oJ3+gWTwLvPvBgsh##4D-wBcHf&GrY7~R|PcEx9nr#~*e zc$jfDAOKO{a&!tDIN1Kpb09kATGpYDbS41a!Gw7>7oyj4;E)t3IW>Zq%6GESRl9E= zN_Dt5foB2koROJedYnNOVfl0F9yq0b1Wc$)_BGBHT-Io3~ zw~X7<*AYA|X3UFhA_>0pF@xnS>m-C{6@|mu(om3-EXBumK zH^Lc6EOw&VZP~VM{rhBvUG_<7qE^jR5dq(y=!neMF!gnIk6CkUGd3>D*vfUJ-#@)Q zs2hLZI;jv(t9iFFGT5tU^4si>+Ur;EVO#y0qFE$)V(u7Nbqi%P(EN;uaL>tg7f22( z>P#i|U~<*X5>K-JCb(s%G^iekE6fG`6T_cu*1G8TU=DEV(6Yprw$Ug}( zd_p5n4o5I@%}xFqb3@Whxf-k|9aOvG-p`ZrRK95`%oVciHqB?QffvAliV=3F2cO7) z-zWY)$A;PHvs6Rcs?)F1eeotyDT%q&mM@NOTZ*?;i^k5OTtv+HNSk+7we4P({8DWd zKB)G&!$-Q-DgDDT{xscaIZ<;oO{L@`1dc3aRQFedyQ-Z&&@@yCDrm-~y|kjs&Iq;B zu`x00c`O4N!y&*__DYUJufIV}#A^mulpUhlMhC!VnP%`_r1mP8v=5(o#Q*VLDk!$Bvn08y!o<{IBgPXws4(B|{K{#l z=aeLmD_4gLtskg2tgxmddQfA<^oezy;o~hwuCnTf;oKik+RDs~l%&fHcWr}+)f$K#=J(GiO>Fo&=*z_;$PNSHl?^S_q+N941E zKFs9qa9^e^`EFs6tod^s{(d@Z0oo8mUvYo2F%f4#lW4vF#!%DbllQOQ9v^YwQUFaRZvEUGXNNQ|zx<-2P|R}EU|FJR zU}x}fbA}dN&uP>)H{4XBtM4)2hPfMJSQlUqHXO4?&zE6c{cHCU31>^FrI=^NX>Cd4 z6vImL`{8d<=-b00z=Mk?45kI2(4$A;lu48Ls|}z1fue92y^3%>a6{zk!&aeWooi=T z6FlR@N8AYtk3#f==B0~lFZBhf>vz$-i}BAQ^N!en2k+XXwn{|a|2V<^01%of^KOsV z)YM$w+SXs%{o1E*qc&8v^Vzd!26A9*l0j(htYA;N=C;?2q3N>ak0_oy;8x{va|NGZ z)s;~;v8~m$q2xl-)6;8^BUVN+?+u}rDu>H(=d#1FYdUp-#y3NveB<&by-Z#fRNEsO zxN8c<=?NZ)rY1$2B9Sp>^Bq^Nw4{_eL2c}Vuk`$gK2t1AmQXSg2k47}YS=XB+C&KcvB~Jqb(}3Fy*t_>6)arD2t$cDIh-QVGa}h56 zjGRl^n`C$F<>Z`BZ;|ctJSFOAMBU!h8vU&ZEF#52MQEk1`C9IAZp~i01D3pPaX;5R zTNofCQuyg_`)$ex6skdpp&4nVQ~2pyn&(eLQV#bJ5#2+ z>A7L_UP2j4m(ccj#DCsZreTJ3yr}WXJcZsmZS+Tk<|NF+`Y50@K35)xy#y@)`5I=~ zPF32o46A0}D%Q~T?D+H(HK+GqJ2X`Cev8grb}BZB=SOeZy0ubNwrh9LMPj~Tqnd}i5)Su&n)~u_s@L!BeNJ`yo;s-vjfP@ZB1w`d zM2f8eWeBA~ZJAODWo$f!B0EYlQ)V(xp>s+~JB~RvTZuNpPNvN7{Z!|DuOHuk-}idY zb)9oLhR^7v! zyz~nE;lX$0%UJjMjw8^~$OESLdqvIv0%K31Zd=yI!A787DWn5JR(|E}Kc+JRN_GdxlC*Q} zI_MwDoRa;+JnOYQ~S9?;ThBYGrJ*C6EjNZmET;E+{P1}toUeFi>)h?c*(QX8Z5MM*u`{i%1`64GsOIaY@qqjZ)gvXBrF*M0Y zFhs5Yed7DgXJx2@4pU*pDUGZm6|1n;m!M$LmwenLK8h)RJLwo8)JvV3vu6F@HD8a3 zn_Nn{@e=!Kr#nhI^iM2cK%2WM&=!=8)`hkgCFnni!ezbLvz^bKJ7%VQ~Bu93P~A#nUfqSMdOclge;`1d=2HgmY;pic;*Y--o*a%WfLH?pwe= z;@yBvidYphLT?zY~w3yfMeh|Gd z(57bjEg3}cS|MX-k;x;x?IwVNkKMYTMF4E2v;OJ+s+dSYI#QwGQB)6T^FE?xTDXJc z(`@xy8<+~%Jz+H+#@P3wDJ#*FPT#B=B$f1D zg@)oXKoe<%=rVlw$D*umUY?bExfR=|n}@3DN?d%LGVVwLq@&PaHzZYN;`V_*Io znevQc5H{Dypc4cc14ze!s$4`SoFHoWKFJgoqZ)!>b>v+hBZR0#qGxb3FRjWKCqobX zo}!WxBRX2_mqna+Q?bfxMZ5lqoHf|pfF4Lt>kxN8fXt7mXo*}tL^n5)HA8zV1eKcn z4;y^>(3J`HG8&)t4=Tkzx+6H0%qWdnjD3~+yimJ|zx}p8EGwr+r@mA6<`s=h)j0O*<*rx0nsXnCpH#ZP&%v5!cw%y*vgm$qaF){B zPT`7DM@PA4n`Rq#qyGHf!3P+Q#pz$#e328%h(QLy2AXN0wotHC(Jd3b&MpI$T84)X zB}t~_YN)slC6%xJSRB<-0IW}AknS0rkes%&1_N_nCM9iHux!(IB%|(A3nzwHqwlXS zJU-;*?X;|DV#o|)ki#gLSK@>?94|-zC%5MF)qC^5wfe|`#6^$Z*Ez{^S<6d4Br@H; zdG*SJI45107!YqF)hmW`A6To3IVxY-Ch@+^F zzG_TMp9fahCg=nlT!!F`DO1{!`_Xs)`1ooO!^DJMN!()JJf8UYcvA$S>N$b728G^C zEezPmE8UtA#I?hXQF-AMeW2Tjai0%eq)7j&?*l;)Xth;Ht;J zse0lu2<;$rb1ZxN))0Gsuw0pY3X5OHWG1n9?WmG&DF7cSAt||=u?6Wk+L+UCQ78b8 zLC zclr8yog8Rz&_{b20r&66qO8ptkkvHzOeCPnW3Xl1oK?OFh62NZr}{{uli{>5bM3ly zyOqAg{;97bAuCd8!41WTs9#mEj?mWoQ%Qy>QtxIGW&6qawj=i2Hn>juy3%M~?h}Lc zTd}7eqMd8uV4a!Fm~h$C-{LM*avNZM3k|Pq%oP2L$MA8I%LWe!PkcpcbIZ<&ggsE0^X8~?D7y-*MdzH}lY z%Dj5T=)PL%;vPtB7O6BWjWYL~aQxg-Jf$ibtjOtp!Kb?|qCaBPfL{E(`@RR-1UM8P z8Xu|f^c`v1{?_op_m2am(r{N-)e5sr(laVlS#PwFxgIV^m!Q1=QnFKjzMQe1ejg5b zCICy2Lpiu%Tljy6_i2cAPToIs&P$O4G22_T1V2SDQ2w>DeEWG?Pfd+MYW1ClBE*MI;_kC!hl+xX83t#_=iR$+aw6ALi0%B0e69>jxV&lep)Wa9s13?Cb z_U3-%p%rjm`HypG&m!YHNAAQ}_$uxKF=wQs$<&NQI=WqfHSQwgAB|W0> z5A9Q$XWyL#w7E~C_``(+5+8HKlw=&Jy!tS}9-2a>ypH% z@b#4?O@7QY#5#Zms*bkJ&e5(ofz-0 zK)jIxZ_+AtQgGh&8ki6Fp$1Er-aHN&M-Y1P(}VocuEaop{|})@8YgD$R1gHqa1U-Q z0qa0U)mBN19rxEJW09*}xrMRVGTaqWYHk=yazHg|>?EC@fXtmt&ngiC>9F+62}`*n z@A_r0|6!PPq2gs&y?SIuYl)faP*V;>Qs&AX&Xnx}$}vYwHIp~PMS~U%!x2N(E#3SQ zS~fm}g|d71+X8(*wKpr8 z9JR48N&-F$elXRvWCO3BT&tW&oZE?6>aXUG-&rtwwFu?XRdxN(#u6?&gq59=asn=r zDY43%&1ubOj?Ry>@9<2?-_^zYk@ z&z?=gj$*E~vOz@vaR)|vdPmo+Swo5fU>>~D`TcKb8Z58{?b{D4@cd`wl1TdHRc*68 zUj26E&O*ww$cVT>$syEpKXfQ3Rs~rFpN1t9wMAeR8aiXcPnRpcDJx5d2{OZHJt$HA zYL{KGBW>8mwV*2@vAZMMZ!0I{QA`Zd;yvBBWXqobNL&>1A!~%Q|4E3i_Nv>ng$>&m zef>r4``T09>*>{u3e3Cld3TzP>-SG5RIPvcjeOtZqKN_kO%8jd! z%sj3~?Y@ulu6>M}sGai_IXJzAwWc8sY>7>fVOFE3BPoExY10aZYsU+K{a#U$#Gesc zc*IXw9ykedPA+NEf$@+>u;BW1`eVl3yK)#j2eR)F<9Oqhgq^DIZ`iK--|I>_b1)&_ z`_D4IP--=|MZdB#1?8z1{OrO1s?u3(^eH9|i@*F&Ml+oHT6UAv@>Hy_Lmc{x>xu@6>NJ_~YMK z^Y5`pcoBPEYEfYWSZzaqv+7H~%mT9}>Dbd~h(-|q;5H15jMiEWFHjQX+0EEk(7l;f z1tc_x*wqHGvxuXut^JRQW#}Ux>7s*-fV+32u}1?6xX@?C!CD`7ZgzyVy@z3q)Dowo zF-MdnT%GB9Y17X}f)kO7h7D4%u`$!w+~XYYlJ=mpLKmO0Mm^U?&MsVG;Q za)U|0hYy=r(d}V6w<5pyhRMW26MV=1>$cVXe7;s8#B++tkD`%2TUtVSKj&&ISb@5_aiW4LlY)%x-Nx?uwXU!}|5FVGy{5 z!=}hPy&oz1);j+)8vbAlBPx&)y3z4;E&+LF_Jy^|T(BuzshnFgHjZAcxOGY1y08m> zubkrw50{KBPA8J1WaI^L*YHR$VWh)?dcYVz3dIS-H?iz2;)hxsFi@Kn;y~=68OG%1 zjWL0!P&;Jn%)ZEpJR-=ma@xt?ZWtXWP^zP&ljJ!yi7U^NW z+;Q+Xb3(Fg8>&!l(b{8dYHAG>|3v8Qi^cc@9L72{`;R?Wu~cYcv{Y^KSh?bEUELg_ zLG9)f5|G@uF&hSu>uBT~?=pRJ*Ir(}=p(wWJRoCDXiA+icLT!0diQ2O2ne9kbZ9i> z5DEtn?&&bjIXDoFto`*MZ1jntoZ?!8~9rLzUN%PTD$U#33YmI@{ zb~1M7ra}+NDk_>l>u*Tq?KARIuN4*fVRnDoBT5{PTU2QpP)kB??m-%jCLtwd2yaJ1 zurcfU>434wSf`D@387HvgWYINIP;($=*Ib@DJ3z7-&}2%X4+Y*)ix;>3g^V z1{L#34Um~}JG##fE# z8>AW@jxM6CNJ7o%iFYXX^-C4*58TZa*eKuPc3@=bjpw_j zKLWF68L)<;$HADw?4?lr03Bffo$p#Aocq>rqC6K5Vl1)-WP)0^NvVKYO%*P}ydK zIy?jyMPt3PvQr~-(GAlkFE1|}Hi?C90K-cC0yStRD-WjcCvk+M+65n5FS@U9OhlWsj+vu z!&{`AYhe)GAy!?vav0z|6GG&xs{4TI;bR9YJSPt@GNE*C28boV)499jKL^G6t3aC$ zg0z79$bElhUM{b}Z_^F&1x@|L6+sX1D8sJ?K!cnoTt}l#YHfpMcrtp3wlH|yVm36Y zlc_$Zi$>_kf@_1=0V2N>=00RXD-fyJDr<-KGZm_1NuZshKKd%}TWWsc*rP*YJVMj0 z;i1HDd7Q;3D%!m;0OS;gTNDCCJ#Z*Ttc?S-^oU!Zx`=#!*BeB}-SDkL_YUmS(Mbp5 zZi0gK7!tDC04OaX4lmv7Saqb04>ol#?n$3e6}}qhi>^G+i{v)< ziAzZAha`ev6nJ1-ql&tvIREkGZPqjFlbH3xj&cq__i%}sUy>iCM$ zCuH9!1ek?(AI==a1tm6YFhGBK=2%p;CAVlS1;#THrrK0dQ4v2%`e&tzpQEw#j4N(P z%U`Ky2Fh0t;+i{Dxl{iEuUPczbG3 z)o$rpr~}WxTyD9ke!GZAl6Coo4mk*ZUS!s&A4_{rCh# zypVI#+4f#e$N}I7e99y2A`+L9VsVuCcJ}ZgtVR8nBdSk76}n1W9WpS80qz80>>lnr z$9l=M7fpFG`a%6{xfNi~=yQ?D2rv-l(1K(Ri#sC+-5@U`qYrz{{*S4G;E+nngtJLo z;r%TraL&Vn#u7>a$3bbN?XF~Jncm{*r)bq$Z?%IsD``InC8#D(d5%_x+ahTpGj{Fy zFni zu~$uyhlL9egjcTKLptnl%ctS$V7 z%vf7{dxO4~(8+Sem2%brfHi@EJq}6mPL1nhLykj#`vjamH;5osgjB^>Qh09oOncRo zF)jVi#h~8{Q~Ue-?Z8E6L#ql1es_43?RScUParI&oE(lz9c19H?SaNg5fRT=oHEH& zEEY1$HsKDt{D#5efx+9nd2@Hn-F@khs<42+1v0{qtozMydQ3{0`^or7P27s8@2r>ZI?uCaJS6rM}+YwW( zmp6Tn=qXyC)VBdUjz5JFeJAF(jW?Hz^6(zapv=MPfjI%EZim!737Z}&Iy{D7sByjJ zik4>CNB{a&)~Dx|rZNTj^CxN(ow{tzVDQxm0M2B2nTn-4GIF!0IaG>-ZnA{+PWx8K zBXVF7Va&>vK5yVwc7EMe0u{w6{B<_D8Sr#;lq$J1n`Y7JNU6zlLLg;o`IAS;8Xj1N z!(zdL0zA>#ZnMi335~ipR4GeTdg)xR={qMd)kq+V>2YzJ3;Jra7feCYFnoHzmHh?6 zcQgC8?#pw9Z$5CVwjHL15?eta$-RI8cv+k3$F~bXdW{L%R5)-r9J77gvt=un?}%nfG>oohgM`X%(H^0 z3>ordm}l$-pN;vi5C9(hEiZVw^N9FblOI*b_R~9pKnuT$cH8d|HfK~!R<3kMTH}m@ zEplDC^;X)ucV}Q;!i6yuQZrdj<%*nlIV~Qa3+3aaD)Sa@mX)=Gy%9JUs<36cIf*-z z^*GMZ$Y_ZyZx#>(3?aNu5^_=aI5>j}BJh@#ocePLR?&s;;w1cf4xD#6%gDgsgunI+ zL_;9V2swrJMIw4E)MAiP?->xNyz`vw4}YGwM^JRSsW-TN$NCr918{jE4g`*-!XP;9zZ#m6fGyysg$%Yeve^f}R$A98O{Ao^lcB9`}lB)UxiT(b51l z2y1%SeXtf*K;&IEtZUu=0|$stf%N6D%+gy|rvtD{3Hp*@HGp=g&-qGQ)TZ`iL=GS7+YH>AaBaKeXXYxX08?q7e`L0 zGv?Y0msM2MLqC@Z1%695=D{3-=$3Gm9{mqn;&3Jchea-*o3ZES8R|+UAJ^naU>+km ze=xGAb3gpXLW)~;%zbi%Q-|2(C(8>hS^k3(UvE_9)Zz5O2{a-zZsD7TxcM_?ydq{p zo+k}ta8pX&rxh&3FZL|9%V#O{1|~@y_zwiFc|lImGw-9T#8F?e3$_uqh>*ajQCg8< zS5dBxH;X?7+q1E7U_Wt5IFdDANj|Au5tiAha_7GgI>2{~T z8B&~LOR_XcT6+Kf{Yh8?h_9Y{=N}TJ&e)=%xf`u_iY}IvlFCXOpnfhfE?4k=U*h|=DuTz z%rs$!sbxNV9CRLu<`QL1{pxR6*0)LH z<+OpUHyaC>csQie$&YeWMsuA3=-k0~41u|90C{){yKH!<&oyS{jTzoEYsYcJJ-bA_ zH2LRUZwsl0zHk5l0C}EMAT7GU7s9#3i1{jr(pzSI2)Roo;UNhHq@-%0-r0gyv*-L4 zA2vihx0Udvh(!ZIRD!*Zhcbih%FD|OEm&;O@So3*DRKht+&QB#B_KX`x?#5VPe=$u z2-65mdhGS<*X$0%0bN2ipe4mzcV@@UgQriY{J`?4%cjGFZpv`iDv63Vsa%|iJ3NRp zM05+VY5We%ujN)0Z-A>dl6aCC+q^2f8Oc(?vWt2$GoV+2fs6iUuXSNhz+MtF4J&Qj-pkjc z`IEasw)GuI-GYjtRh6ZMz!E268?q2ln(FA3sowR3$x0?DVqWfMgV{6Q+D5Oy!u;dv z>X*Tiz+=Eff6DnaI>dpzNi0D;{N+9p5EH8Mu)|w9Ha_K~AGD0M$gz_*MD!A><6m~H zS+`D7kmoZASZV7*sh#ido!ZqtW2vMLnAE0sh}R*OJNkp%vkbfVl3C^%qcqxx;{r<* zsrL$Umg8vKaZ{1~0VLMkEtTsemd-dgu{tYxy?u{DqOXPWjyqJ0Avb5>n5~laX;4F8 z$~X^~lYpbRS(e1r@E?AP?7wb?iH$m+=fCCuq)ThYIf<|0Mxi(fA@Xf14QoB5G|Sal zn2JbqH)C?NzF3DrSRhzN4cwhVjDwc4U}bUVmYQudHsfK5!P6^*E)$u<8X7ccHIk`M zqlk2df8L0%cPR3u@O$?W3X!rVFhpgxYZHE-@rdC%Qr0`QA|SnpLw}GsaLj1WQxDpF z?dz$^o-+zbpxn1Jwpf-6Lf@bx;mNbbrTa*2Sg`PemPoTXMtYG9GKRQoRQ2j- z6k_X$i;3+3Tmb^9MOKC?)HpsTuHnD#K}nbATo7d&i@qJFRiTOV;5!Syp3~3F`+wKu zNGr4l8~~KbMA#_@1|t2T*9^+$QsW~X%Q!*61*AC%UQ_93$_6VrCd4#H(<}WmI>zU~ zM(HE{kEPM#d@#N;9p?0kdP!GW#}9ZqIqQ`3HbbFWvihQltUU? zKtQ1Lm6)FaAhV$yU+uN&7t6YuVI9=|^`6=3N+@Hq5S@{HS{ExPb#k1eCaI=&1al-& z1CmZ+bZ{UleJ}W+((y^i_lny!{e9m&VrW{kSyqvgiR-{0?9E}jB*FoJ(g3rp6;I?3 z5)xmH0`m|oZ*lu}1_s^8kWc^i^p##TmC#O0jswZ4PV)WiiyR?1a?~CekBp31qv@cq z+ZXjvWMpbegi;O6*RCiVFL|ut~Ir`d=<@TJtOA`#(H$Ds*Rk|7umQ-p_AtZ;FhY^Zk35a(C#@ z|M81wZ$vHm@l`9&PN^SXy%6#?{qfaJW&W%mUoCPLxBlh(m;d)Kcqz9JnAi$)DwOb6 z1H-~nKq@%)Hkp8hHA0n$qx?doSyo%pjhb(hTN+xoZk-kkd>-Zl>-P@v?Nd-E01a5) zutW;0P<#3NGg?0d>g_-ZTkqJh$gaBNM1PQ^$@K+ zhX>{A4;|=LjnvaNKI|AswL;{9l%`)o#7X>$l0JE<+iwq%j02;py1Ewg5?dxfPxQJ^ zATBg=DZq~hqsR-tw1Om57%@cpvv%!hZ#^K9I~yNlE&csH$EA_hB1pTVwn=5^-81)< zxGw}9wEd`DdX%#OYyIypVru5oRIE%v%S7}}#69CWHhg&8<=^*4#7n^8`@@ds&VBV5 z)}_(VdR;)k(DWg0u__n-9zIVaJ5$d<0dQj0Xx&GkjRWkPv6`! zfy_?9|9IR=!c))+JhQ$4eSdA{f({%iQiZjXEIf>*b@{opP9Lr>bvc3p()cEKcmhP9 z8)y((8ektJL|Ne%SN!}%B4@*P*~=J!8ixplS}eo0gfD6WkOfkk&%KdC2%b>2^;gQJ z1P+s#P=F_*Y`=r}#uU!=vA4Ik0g!gH`*3p?`VixPw>WkgsDPGY#GtOu1`Xk464&C7 z8@;~o;?}=G4#g8`E&SF7XAEpkCb$+w$P%ZQ<6ZE4-+GJWNu~gCyEu*p;eesQO3%oU z11~`gGK@}bvnGY2xAXs;>P`CFzMpT(|38KR_w)bARFzN7t^C%sqCTJcg)9PX=RVC8 IjiXoo7dq-19{>OV literal 0 HcmV?d00001 From 9448fb254a8061af72a47becf75a9a2de704a36c Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Fri, 2 Aug 2024 21:32:49 -0600 Subject: [PATCH 19/22] fix --- public/posts/flox-smart/dataset-repr.html | 579 +++++++++++++++++++++- 1 file changed, 578 insertions(+), 1 deletion(-) diff --git a/public/posts/flox-smart/dataset-repr.html b/public/posts/flox-smart/dataset-repr.html index 26984fa4..dcfac4a9 100644 --- a/public/posts/flox-smart/dataset-repr.html +++ b/public/posts/flox-smart/dataset-repr.html @@ -1 +1,578 @@ -
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
<xarray.DataArray 'zwattablrt' (time: 14608, y: 15360, x: 18432)> Size: 33TB\ndask.array<getitem, shape=(14608, 15360, 18432), dtype=float64, chunksize=(224, 350, 350), chunktype=numpy.ndarray>\nCoordinates: (3)\nAttributes: (4)
xarray.DataArray
\'zwattablrt\'
  • time: 14608
  • y: 15360
  • x: 18432
  • dask.array<chunksize=(25, 350, 350), meta=np.ndarray>
    \n \n \n \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    Array Chunk
    Bytes 30.09 TiB 209.35 MiB
    Shape (14608, 15360, 18432) (224, 350, 350)
    Dask graph 156244 chunks in 3 graph layers
    Data type float64 numpy.ndarray
    \n
    \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n 18432\n 15360\n 14608\n\n
    • time
      (time)
      datetime64[ns]
      2001-01-01 ... 2005-12-31T21:00:00
      long_name :
      valid output time
      standard_name :
      time
      valid_max :
      4862880
      valid_min :
      4777980
      array(['2001-01-01T00:00:00.000000000', '2001-01-01T03:00:00.000000000',\n       '2001-01-01T06:00:00.000000000', ..., '2005-12-31T15:00:00.000000000',\n       '2005-12-31T18:00:00.000000000', '2005-12-31T21:00:00.000000000'],\n      dtype='datetime64[ns]')
    • x
      (x)
      float64
      -2.304e+06 -2.304e+06 ... 2.304e+06
      _CoordinateAxisType :
      GeoX
      long_name :
      x coordinate of projection
      resolution :
      250.0
      standard_name :
      projection_x_coordinate
      units :
      m
      array([-2303875., -2303625., -2303375., ...,  2303375.,  2303625.,  2303875.])
    • y
      (y)
      float64
      -1.92e+06 -1.92e+06 ... 1.92e+06
      _CoordinateAxisType :
      GeoY
      long_name :
      y coordinate of projection
      resolution :
      250.0
      standard_name :
      projection_y_coordinate
      units :
      m
      array([-1919875., -1919625., -1919375., ...,  1919375.,  1919625.,  1919875.])
    • time
      PandasIndex
      PandasIndex(DatetimeIndex(['2001-01-01 00:00:00', '2001-01-01 03:00:00',\n               '2001-01-01 06:00:00', '2001-01-01 09:00:00',\n               '2001-01-01 12:00:00', '2001-01-01 15:00:00',\n               '2001-01-01 18:00:00', '2001-01-01 21:00:00',\n               '2001-01-02 00:00:00', '2001-01-02 03:00:00',\n               ...\n               '2005-12-30 18:00:00', '2005-12-30 21:00:00',\n               '2005-12-31 00:00:00', '2005-12-31 03:00:00',\n               '2005-12-31 06:00:00', '2005-12-31 09:00:00',\n               '2005-12-31 12:00:00', '2005-12-31 15:00:00',\n               '2005-12-31 18:00:00', '2005-12-31 21:00:00'],\n              dtype='datetime64[ns]', name='time', length=14608, freq=None))
    • x
      PandasIndex
      PandasIndex(Index([-2303875.0, -2303625.0, -2303375.0, -2303125.0, -2302875.0, -2302625.0,\n       -2302375.0, -2302125.0, -2301875.0, -2301625.0,\n       ...\n        2301625.0,  2301875.0,  2302125.0,  2302375.0,  2302625.0,  2302875.0,\n        2303125.0,  2303375.0,  2303625.0,  2303875.0],\n      dtype='float64', name='x', length=18432))
    • y
      PandasIndex
      PandasIndex(Index([-1919875.0, -1919625.0, -1919375.0, -1919125.0, -1918875.0, -1918625.0,\n       -1918375.0, -1918125.0, -1917875.0, -1917625.0,\n       ...\n        1917625.0,  1917875.0,  1918125.0,  1918375.0,  1918625.0,  1918875.0,\n        1919125.0,  1919375.0,  1919625.0,  1919875.0],\n      dtype='float64', name='y', length=15360))
  • esri_pe_string :
    PROJCS["Lambert_Conformal_Conic",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6370000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["false_easting",0.0],PARAMETER["false_northing",0.0],PARAMETER["central_meridian",-97.0],PARAMETER["standard_parallel_1",30.0],PARAMETER["standard_parallel_2",60.0],PARAMETER["latitude_of_origin",40.0],UNIT["Meter",1.0]];-35691800 -29075200 10000;-100000 10000;-100000 10000;0.001;0.001;0.001;IsHighPrecision
    grid_mapping :
    crs
    long_name :
    depth to saturation, rounded to highest saturated layer
    units :
    m
+
+ + + + + + + + + + + + + + +
<xarray.DataArray 'zwattablrt' (time: 14608, y: 15360, x: 18432)> Size: 33TB
+dask.array<getitem, shape=(14608, 15360, 18432), dtype=float64, chunksize=(224, 350, 350), chunktype=numpy.ndarray>
+Coordinates: (3)
+Attributes: (4)
From ab715b9d0dd2d7b564b398fb25033f3152687bd5 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Fri, 2 Aug 2024 21:35:10 -0600 Subject: [PATCH 20/22] edit --- src/posts/flox-smart/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index 7074dcae..e56e30a6 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -5,7 +5,7 @@ authors: - name: Deepak Cherian github: dcherian -summary: 'flox adds heuristics for automatically choosing an appropriate strategy with dask arrays!' +summary: 'flox adds heuristics for automatically choosing an appropriate reduction strategy with dask arrays!' --- ## TL;DR @@ -89,7 +89,7 @@ mean_cohorts = ds.groupby("time.month").mean() # this is auto-detected! Using the algorithm described below, flox will **automatically** set `method="cohorts"` for this dataset unless specified, yielding a 5X decrease in -memory need, and 2X longer in time +memory used and a 2X increase in runtime. Read on to figure out how! Memory usage From dc559a7bb524cab3e893e8d82cc28b3c89919e84 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Mon, 5 Aug 2024 13:28:56 -0600 Subject: [PATCH 21/22] Updates --- public/posts/flox-smart/mem.png | Bin 124001 -> 111799 bytes src/posts/flox-smart/index.md | 13 +++++++++++++ 2 files changed, 13 insertions(+) diff --git a/public/posts/flox-smart/mem.png b/public/posts/flox-smart/mem.png index dddbcc5a19bc6b927487d9b9f19a0292d7dc206b..83099e89fe6b8830ddeef1d7eb56dc81c65cb730 100644 GIT binary patch literal 111799 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

o|g6-7Yu*$aEWY( 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 D^6hX_ZFX^AVx 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 Q@R#wJNrvY}&0GKf0rtVhga7~l literal 124001 zcmc$`WmHyM*e?8lg@klBQqrKbbf^dt(jcuM-5{-iG>AxdNed_~rL=&664I%3NlKo3 zx%Ym@`~CQSo^cpDbm$Xn%{lM5;$9&t5ANV#QedJ`D4ctDWz|rqin}BtN2pZ}htcF?e*(0~m9v zyDB!L66hb^EQsm4-BhXX_B(ASZM191>`9;aF~%*5h|9A7{RqfftfPYe`}q=jkCWlw zpZCIwmiYhvME4r2h5h#;>uWK(|GnMJDPi!xH!vi(d(%At7~lrAB|2 zkFI}yKMn{A(i6r0_l7N4TNF6oTQxQ|j&C z_sjF2+~DAleemF#qmz@Wwl+qkuFd+Z;LgwhY5E+s8!4%&vvYIk1?raTuTcN9f#=^W zZrxQvFr3m@#QxVvKz`#HZ42&`p_5V3(elK32rv}7TR|`%|Owh%26&plI$qwfZ zSkT3HN5{qn-ie|?L-F0bIlI1&lc@NlvgQYC+CK~VDmpsTdu?&?iiCs&Y${KtoGc#3 zMSFYu{xe(FxU@9ew*3D&s;Fnro{e?T(9jHH1q54Gyl$dZIGZZF{NIViV2i~>(UF9W z%7g_g5`@T(P2;yU2^I(buY;?tG#c0Q|2^&2cO4!1s_dpCaV1XhAkH|vyu9e}FyI%D z?L-Y`Nost2P(o$}Z-KFPD_v0iB)Z=zO{(BU&#uVV3cRHS(ooQ6<2hsWj*VNST zO%hU4hM`@!JoBqJS!Bd+qUJfJpsmrL-#-se52oP=8oQ9?GF z@SR%+2OS5~zELqO%5$4d=j~<2Ehv<#sw$a)HQAu0OIwr9zxP*2oG|#Fp4R7(zRG6& zWlj#`#78&W`*9ovTS>4%ge(sN6mma%ZZ=%u=H?FD&?_@SgLOtjB}n*+$8kLh%}evZ zd{pQB30@H-=D9D)L2{j&8~3L9*IRWj)e2g7m%nFf7R~ayCM6O48k3DDBxV za_g~*s}J)YTtZQady!cU7Z+?D-2W$Ys2j|;N3cKarYY1_v>bgEC2>Y};mWn*L7U)d z?*r#IgrRMpm)P z!zaEsyt@2M+x1W&jwZ70G~CN7NCxgqBj6sVsDR6g`ogbYCc8@mOOqd~+YYFO9c7Pe z%=^-q7Xx3u{5(2JjFSr@79RSZY+rHRn7FE}tjwWZmZ5lH(B$*zxaQf;FXqLNHk0+Z z&#w2?!J($@uE~Qp4wFy?!v^6EK+4!NQjJi)ilrETp|R$2xzIf?Zx7J~>ti zj(`49ZeE^Ma<%WDpYdBeJM7<2x3{-ZD06djcX#)MR7xVEfcx=W^pI>EYpM7Wu~DyH zy+TF2T?%|`WMouewIorU8%k*YmXVn`?x`4jr)Qp;)z+WL)gO+t;~hT2VKyU z<|rgjkEJO3qU*|dtvj+c^LaJlS;8Q>%OrIP9yvsnMpe@GihtqI+USRENQchL-!8!c z<=8nL9UVoXNJ-<>7D?1sO)Mysj*d=(s2dkV z^952;(!=B9>kJI&9Z|F+wcNtObi|dU0u~Kl8%GX54-#q}3yaib)ioo~HWPLG_KF%l9Memc*3uRz_TEtD8?iKL_? z%8ZX3QeuDh9b69G3Jgd*x#F9ZRwF#FYuXntUHbIt6PlEil>2gSy#3Mcvf8GY`&P!j zx%1YH)CZ@q#okoWk+pgxR4YdeWbWR@fch{qH}?XvoN4DPdhG@e{`c?SD^4Z9dgbRf z?M+H8;_R1~$3jI#rPAc%joj9iYgDXz$K{ub2jAZe!liA8z@R4y+lHXA@_iO3x6O@y zpQ4*o>j|2q&)K|u36pQ)o2tkHez^Gjqe;at0yVDdQY2|sq(*@j*j=%fALem?2&DyE z<{uuq@2-!NR@+W~GwAN^ZJYKzkAQq*v_4k(Z~6-e4#t>h@--BNM1|{nx<~4|ITevA z>NZ!9m-bCZl#A=@($gK3{pOSylHpcIN;}v~>tARTX-aVjq_f>sR_?&!t~av(a$4{( z&mMXbn~#)QS|jhz$im0!T-XhK{yc`rO-ex$|6-cwwUKv^zSo{D4P2)ZcD#5elIjyA zs$gnSS2`h~A4?QSB(_IVhkgDmy*m)?_t}0Pm&^M2h%+lD_`$|d zgiqE#BNVioY8@`o+a9<>ORf}NqFs(|SHJ!8ljjoLcWXz7>FLp40*^7e&)J_vwe$0L zUDkq*Y&UE5Bk#p9OJxtt^a@VPj#t@qS4R5#UqCIL1leu~hY5>_bM0{(w7hmvEHMuG zR>jWD%=}q9obBDR(sRadFrr>zFMYDEf z=jiF~>Ig2UUR3~;-f!Q&*{=?Bav0Q;X_XqZCGlJJ*EpDZooshJF-^Vwj1Nib(bw;o ztovWW>po$GoioVw3LL&T8jrKcOcXE!&adU_NgV_ZSX2VCTK&&|FW2yS~fw~=RQ zP#=+Otil%is>{rMwWJyvNVG)7mq^_V<8EwzbK_zE`^VjwzRJ0(MMGq_-FfymCb3W$ z*RHh>7CgkKpul8dVS&6hcep*T-Q?3SaIE!CKV-zf69?5_=VGOpcAI>CygCS$bZ&00 z%%lx-ZK9TtU9;Hl<3~|Q4#{liX@!_Ex~>bbt{uI}g7`#4>Xsqd!fm6j_p8vM`-z`; zqRnS&I41ITxJ>rxX&n+N*06t1R&_2Zu*;h0KTli_^82$MB5Ouosq4R6|4m}%9p~-T z96ZeK#+KY-F8vxmnV@T#P;AGnGBYzRhKtEBW0U!VHan5(Gx1Fr3aaz2#GF)P{RquVY`w3QLYo(}^fsc=1+G_{rY$yGk zjL};`#QW%0A{6!|SIUMiXKt)5P`y3T~O@W3@ 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 IjiXoo7dq-19{>OV diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index e56e30a6..2d6075de 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -90,6 +90,12 @@ mean_cohorts = ds.groupby("time.month").mean() # this is auto-detected! Using the algorithm described below, flox will **automatically** set `method="cohorts"` for this dataset unless specified, yielding a 5X decrease in memory used and a 2X increase in runtime. Read on to figure out how! +Read on to figure out how! + +_Note that the improvements here are strongly dependent on the details +of the grouping variable, the chunksize, and even dask's scheduler. In fact, writing this post +prompted the discovery of a bug in dask's scheduler that should substantially improve the "map-reduce" +case._ Memory usage @@ -200,3 +206,10 @@ _[Get in touch](https://github.com/xarray-contrib/flox/issues) if you have ideas One way to preserve context may be be to have Xarray's new Grouper objects report ["preferred chunks"](https://github.com/pydata/xarray/blob/main/design_notes/grouper_objects.md#the-preferred_chunks-method-) for a particular grouping. This would allow a downstream system like `flox` or `cubed` or `dask-expr` to take this in to account later (or even earlier!) in the pipeline. That is an experiment for another day. + +The improvements described here are strongly dependent on the details +of the grouping variable, the chunksize, and even dask's scheduler. +In fact, writing this post prompted the discovery of a bug in dask's scheduler +that should substantially improve the "map-reduce" case. In parallel, there's been work around +improving shuffling along dask arrays. +Clearly the last word on the GroupBy problem has not been said! From 8b39d32978230174391a5571508a5a1308499a3b Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Tue, 12 Nov 2024 14:41:26 -0700 Subject: [PATCH 22/22] edits --- src/posts/flox-smart/index.md | 80 ++++++++++++++++------------------- 1 file changed, 37 insertions(+), 43 deletions(-) diff --git a/src/posts/flox-smart/index.md b/src/posts/flox-smart/index.md index 2d6075de..5159ffd3 100644 --- a/src/posts/flox-smart/index.md +++ b/src/posts/flox-smart/index.md @@ -41,13 +41,12 @@ This issue does _not_ arise for regular reductions where the final result depend ## Avoiding catastrophe -Thus `flox` quickly grew two new modes of computing the groupby reduction. -Two key realizations influenced that development: +Two key realizations: 1. Array workloads frequently group by a relatively small in-memory array. Quite frequently those arrays have patterns to their values e.g. `"time.month"` is exactly periodic, `"time.dayofyear"` is approximately periodic (depending on calendar), `"time.year"` is commonly a monotonic increasing array. 2. Chunk sizes (or "partition sizes") for arrays can be quite small along the core-dimension of an operation. So a grouped reduction applied blockwise need not reduce the data by much (or any!) at all. This is an important difference between arrays and dataframes! -These two properties are particularly relevant for "climatology" calculations (e.g. `groupby("time.month").mean()`) — a common Xarray workload in the Earth Sciences. +These two properties are particularly relevant for "climatology" calculations (e.g. `groupby("time.month").mean()`) — a common Xarray workload in the Earth Sciences. Thus `flox` quickly grew two new modes of computing the groupby reduction. First, `method="blockwise"` which applies the grouped-reduction in a blockwise fashion. This is great for `resample(time="Y").mean()` where we group by `"time.year"`, which is a monotonic increasing array. @@ -83,13 +82,13 @@ For this input dataset, chunked so that approximately a month of data is in a si we run ```python -mean_mapreduce = ds.groupby("time.month").mean(method="map-reduce") -mean_cohorts = ds.groupby("time.month").mean() # this is auto-detected! +mean_mapreduce = ds.groupby("time.month").mean(method="map-reduce") # mapreduce is a suboptimal manual choice here +mean_cohorts = ds.groupby("time.month").mean() # cohorts is a better choice - auto-detected! ``` Using the algorithm described below, flox will **automatically** set `method="cohorts"` for this dataset unless specified, yielding a 5X decrease in -memory used and a 2X increase in runtime. Read on to figure out how! +memory used and a 2X increase in runtime. Read on to figure out how! _Note that the improvements here are strongly dependent on the details @@ -99,7 +98,37 @@ case._ Memory usage -## Problem statement +## What's next? + +flox' ability to do cleanly infer an optimal strategy relies entirely on the input chunking making such optimization possible. +This is a big knob. +A brand new [Xarray feature](https://docs.xarray.dev/en/stable/user-guide/groupby.html#grouper-objects) does make such rechunking +a lot easier for time grouping in particular: + +```python +from xarray.groupers import TimeResampler + +rechunked = ds.chunk(time=TimeResampler("YE")) +``` + +will rechunk so that a year of data is in a single chunk. +Even so, it would be nice to automatically rechunk to minimize number of cohorts detected, or to a perfectly blockwise application when that's cheap. + +A challenge here is that we have lost _context_ when moving from Xarray to flox. +The string `"time.month"` tells Xarray that I am grouping a perfectly periodic array with period 12; similarly +the _string_ `"time.dayofyear"` tells Xarray that I am grouping by a (quasi-)periodic array with period 365, and that group `366` may occur occasionally (depending on calendar). +But Xarray passes flox an array of integer group labels `[1, 2, 3, 4, 5, ..., 1, 2, 3, 4, 5]`. +It's hard to infer the context from that! +Though one approach might frame the problem as: what rechunking would transform `C` to a block diagonal matrix. +_[Get in touch](https://github.com/xarray-contrib/flox/issues) if you have ideas for how to do this inference._ + +One way to preserve context may be be to have Xarray's new Grouper objects report ["preferred chunks"](https://github.com/pydata/xarray/blob/main/design_notes/grouper_objects.md#the-preferred_chunks-method-) for a particular grouping. +This would allow a downstream system like `flox` or `cubed` or `dask-expr` to take this in to account later (or even earlier!) in the pipeline. +That is an experiment for another day. + +## Appendix: automatically detecting group patterns + +### Problem statement Fundamentally, we know: @@ -126,7 +155,7 @@ We want to detect the cohorts `{A,B,X}` and `{C, D}` with the following chunks. Importantly, we do _not_ want to be dependent on detecting exact patterns, and prefer approximate solutions and heuristics. -## The solution +### The solution After a fun exploration involving such fun ideas as [locality-sensitive hashing](http://ekzhu.com/datasketch/lshensemble.html), and [all-pairs set similarity search](https://www.cse.unsw.edu.au/~lxue/WWW08.pdf), I settled on the following algorithm. @@ -178,38 +207,3 @@ Given the above `C`, flox will choose `"cohorts"` for chunk sizes (1, 2, 3, 4, 6 Cool, isn't it?! Importantly this inference is fast — [~250ms for the US county](https://flox.readthedocs.io/en/latest/implementation.html#example-spatial-grouping) GroupBy problem in our [previous post](https://xarray.dev/blog/flox) where approximately 3000 groups are distributed over 2500 chunks; and ~1.25s for grouping by US watersheds ~87000 groups across 640 chunks. - -## What's next? - -flox' ability to do cleanly infer an optimal strategy relies entirely on the input chunking making such optimization possible. -This is a big knob. -A brand new [Xarray feature](https://docs.xarray.dev/en/stable/user-guide/groupby.html#grouper-objects) does make such rechunking -a lot easier for time grouping in particular: - -```python -from xarray.groupers import TimeResampler - -rechunked = ds.chunk(time=TimeResampler("YE")) -``` - -will rechunk so that a year of data is in a single chunk. -Even so, it would be nice to automatically rechunk to minimize number of cohorts detected, or to a perfectly blockwise application when that's cheap. - -A challenge here is that we have lost _context_ when moving from Xarray to flox. -The string `"time.month"` tells Xarray that I am grouping a perfectly periodic array with period 12; similarly -the _string_ `"time.dayofyear"` tells Xarray that I am grouping by a (quasi-)periodic array with period 365, and that group `366` may occur occasionally (depending on calendar). -But Xarray passes flox an array of integer group labels `[1, 2, 3, 4, 5, ..., 1, 2, 3, 4, 5]`. -It's hard to infer the context from that! -Though one approach might frame the problem as: what rechunking would transform `C` to a block diagonal matrix. -_[Get in touch](https://github.com/xarray-contrib/flox/issues) if you have ideas for how to do this inference._ - -One way to preserve context may be be to have Xarray's new Grouper objects report ["preferred chunks"](https://github.com/pydata/xarray/blob/main/design_notes/grouper_objects.md#the-preferred_chunks-method-) for a particular grouping. -This would allow a downstream system like `flox` or `cubed` or `dask-expr` to take this in to account later (or even earlier!) in the pipeline. -That is an experiment for another day. - -The improvements described here are strongly dependent on the details -of the grouping variable, the chunksize, and even dask's scheduler. -In fact, writing this post prompted the discovery of a bug in dask's scheduler -that should substantially improve the "map-reduce" case. In parallel, there's been work around -improving shuffling along dask arrays. -Clearly the last word on the GroupBy problem has not been said!