From 8753d313b63e9be8dc8bba30ac2a3cbd8e355196 Mon Sep 17 00:00:00 2001 From: jykr Date: Mon, 1 Apr 2024 12:30:54 -0500 Subject: [PATCH] fix broken documentation links and improve sidebar --- .github/workflows/documentation.yml | 2 +- README.md | 2 +- docs/ReporterScreen_api.rst | 4 +- docs/_count.md | 4 +- .../.doctrees/ReporterScreen_api.doctree | Bin 97972 -> 0 bytes docs/_index.md | 4 -- docs/_input.md | 6 +- docs/_ldl_cds.md | 41 +++++++----- docs/_ldl_var.md | 30 +++++---- docs/_profile.md | 4 +- docs/_prolif_gwas.md | 25 +++---- docs/_qc.md | 62 ------------------ docs/cds.rst | 2 +- docs/conf.py | 32 ++++++++- docs/count_samples.rst | 2 + ...ting_screen_masked.filtered.filter_log.txt | 5 ++ ..._masked.filtered.filtered_allele_stats.pdf | Bin 0 -> 74478 bytes docs/filter.rst | 1 + docs/gwas.rst | 2 + docs/index.rst | 21 +++--- docs/input.rst | 3 +- docs/profile.rst | 2 + docs/prolif_gwas.rst | 2 + docs/qc.rst | 1 + docs/reporterscreen.rst | 8 ++- docs/run.rst | 1 + docs/subcommands.rst | 1 + tests/data/sample_list_survival.csv | 10 +++ 28 files changed, 145 insertions(+), 132 deletions(-) delete mode 100644 docs/_guild/.doctrees/ReporterScreen_api.doctree delete mode 100755 docs/_index.md create mode 100644 docs/example_filtering_output/my_sorting_screen_masked.filtered.filter_log.txt create mode 100644 docs/example_filtering_output/my_sorting_screen_masked.filtered.filtered_allele_stats.pdf create mode 100644 tests/data/sample_list_survival.csv diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index d8b6316..c648a97 100755 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -18,7 +18,7 @@ jobs: sudo apt-get install python3-distutils - name: Build Documentation working-directory: docs - run: sphinx-build . _build + run: sphinx-build -W --keep-going . _build - name: copy image files run: cp -r docs/assets docs/_build/ - uses: actions/upload-pages-artifact@v3 diff --git a/README.md b/README.md index 54337f3..e41abc9 100755 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![PyPI version](https://img.shields.io/pypi/v/crispr-bean)](https://pypi.org/project/crispr-bean/) [![Code style](https://img.shields.io/badge/code%20style-black-black)](https://github.com/psf/black) -`bean` unconfounds variant effect from variable editing outcome of CRISPR screens by considering genotypic outcome from *reporter* sequence. +`bean` improves CRISPR pooled screen analysis by 1) unconfounding variable per-guide editing outcome by considering genotypic outcome from *reporter* sequence and 2) through accurate modeling of screen procedure. Reporter construct diff --git a/docs/ReporterScreen_api.rst b/docs/ReporterScreen_api.rst index d489ffc..54604cf 100755 --- a/docs/ReporterScreen_api.rst +++ b/docs/ReporterScreen_api.rst @@ -1195,7 +1195,7 @@ LFC calculation & Addition sns.pairplot(lfcs) -.. image:: ../imgs/output_20_2.png +.. image:: assets/output_20_2.png LFC can be aggregated for biological replicates. @@ -1599,7 +1599,7 @@ Getting edit rates from allele counts plt.show() -.. image:: ../imgs/output_34_1.png +.. image:: assets/output_34_1.png diff --git a/docs/_count.md b/docs/_count.md index 7400cba..b65b98e 100755 --- a/docs/_count.md +++ b/docs/_count.md @@ -3,7 +3,7 @@ -```python +```bash bean count-samples \ --input sample_list.csv `# sample with lines 'R1_filepath,R2_filepath,sample_name\n'` \ -b A `# base that is being edited (A/G)` \ @@ -13,7 +13,7 @@ bean count-samples \ -t 12 `# number of threads` \ --name my_sorting_screen `# name of this sample run` \ ``` -```python +```bash bean count --R1 R1.fq --R2 R2.fq -b A -f sgRNA_info_table.csv -r ``` By default, `bean count[-samples]` assume R1 and R2 are trimmed off of the adapter sequence. You may need to adjust the command arguments according to your read structure. diff --git a/docs/_guild/.doctrees/ReporterScreen_api.doctree b/docs/_guild/.doctrees/ReporterScreen_api.doctree deleted file mode 100644 index 0ecb4dfa5da00e6eaa5178e491d69ab7e476f857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97972 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 diff --git a/docs/_index.md b/docs/_index.md deleted file mode 100755 index 45e2414..0000000 --- a/docs/_index.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -layout: default -title: CRISPR-BEAN ---- diff --git a/docs/_input.md b/docs/_input.md index 21368b8..0a4b6c6 100755 --- a/docs/_input.md +++ b/docs/_input.md @@ -4,7 +4,7 @@ File should contain following columns. * `name`: gRNA ID column * `sequence`: gRNA sequence * `barcode`: R2 barcode to help match reporter to gRNA, written in the sense direction (as in R1) -* In order to use accessibility in the [variant effect quantification](#bean-run-quantify-variant-effects), provide accessibility information in one of two options. (For non-targeting guides, provide NA values (empty cell).) +* In order to use accessibility in the variant effect quantification downstream (in [`bean run`](https://pinellolab.github.io/crispr-bean/run.html)), provide accessibility information in one of two options. (For non-targeting guides, provide NA values (empty cell).) * Option 1: `chrom` & `genomic_pos`: Chromosome (ex. `chr19`) and genomic position of guide sequence. You will have to provide the path to the bigwig file with matching reference version in `bean run`. * Option 2: `accessibility_signal`: ATAC-seq signal value of the target loci of each guide. * For variant library (gRNAs are designed to target specific variants and ignores bystander edits) @@ -16,7 +16,7 @@ File should contain following columns. * `chrom`: Chromosome of gRNA targeted locus. * `start_pos`: gRNA starting position in the genome. Required when you provide `strand` column. Should specify the smaller coordinate value among start and end position regardless of gRNA strandedness. -Also see examples for [variant library](tests/data/test_guide_info.csv) and [tiling library](tests/data/test_guide_info_tiling.csv). +Also see examples for [variant library](https://github.com/pinellolab/crispr-bean/blob/main/tests/data/test_guide_info.csv) and [tiling library](https://github.com/pinellolab/crispr-bean/blob/main/tests/data/test_guide_info_tiling_chrom.csv). ## sample_list.csv File should contain following columns with header. @@ -34,4 +34,4 @@ For proliferation / survival screens: * `time`: Numeric time following the base editing of each sample. -Also see examples for [FACS sorting screen](tests/data/sample_list.csv) and [proliferation / survival screen](tests/data/sample_list_survival.csv). \ No newline at end of file +Also see examples for [FACS sorting screen](https://github.com/pinellolab/crispr-bean/blob/main/tests/data/sample_list.csv) and [proliferation / survival screen](https://github.com/pinellolab/crispr-bean/blob/main/tests/data/sample_list_survival.csv). \ No newline at end of file diff --git a/docs/_ldl_cds.md b/docs/_ldl_cds.md index 90740ed..3913879 100755 --- a/docs/_ldl_cds.md +++ b/docs/_ldl_cds.md @@ -51,10 +51,11 @@ bean run sorting tiling \ --scale-by-acc \ --accessibility-col accessibility ``` + See more details below. ## 1. Count gRNA & reporter (:ref:`count_samples`) -``` +```bash screen_id=my_sorting_tiling_screen working_dir=my_workdir @@ -67,11 +68,13 @@ bean count-samples \ -n ${screen_id} `# ID of the screen` \ --tiling ``` -Make sure you follow the [input file format](../../README#input-file-format) for seamless downstream steps. This will produce `./bean_count_${screen_id}.h5ad`. + +Make sure you follow the [input file format](https://pinellolab.github.io/crispr-bean/input.html) for seamless downstream steps. This will produce `./bean_count_${screen_id}.h5ad`. ## 2. QC (:ref:`qc`) -Base editing data will include QC about editing efficiency. As QC uses predefined column names and values, beware to follow the [input file guideline](../../README#input-file-format), but you can change the parameters with the full argument list of [`bean qc`](../../README#bean qc-qc-of-reporter-screen-data). (Common factors you may want to tweak is `--ctrl-cond=bulk` and `--lfc-conds=top,bot` if you have different sample condition labels.) -``` +Base editing data will include QC about editing efficiency. As QC uses predefined column names and values, beware to follow the [input file guideline](https://pinellolab.github.io/crispr-bean/input.html), but you can change the parameters with the full argument list of [bean qc](https://pinellolab.github.io/crispr-bean/qc.html). (Common factors you may want to tweak is `--ctrl-cond=bulk` and `--lfc-conds=top,bot` if you have different sample condition labels.) + +```bash bean qc \ ${working_dir}/bean_count_${screen_id}.h5ad `# Input ReporterScreen .h5ad file path` \ -o ${working_dir}/bean_count_${screen_id}_masked.h5ad `# Output ReporterScreen .h5ad file path` \ @@ -87,13 +90,15 @@ If the data does not include reporter editing data, you can provide `--no-editin As tiling library doesn't have designated per-gRNA target variant, any base edit observed in reporter may be the candidate variant, while having too many variants with very low editing rate significantly decreases the power. Variants are filtered based on multiple criteria in `bean fitler`. If the screen targets coding sequence, it's beneficial to translate edits into coding varaints whenever possible for better power. For translation, provide `--translate` and one of the following: -``` + +```bash [ --translate-gene-name GENE_SYMBOL OR --translate-genes-list path_to_gene_names_file.txt OR --translate-fasta gene_exon.fa, OR --translate-fastas-csv gene_exon_fas.csv] ``` -where `path_to_gene_names_file.txt` has one gene symbol per line, and gene symbol uses its MANE transcript (hg38) coordinates of exons. In order to use other reference versions or transcript ID, you'll need to feed in fasta file. See detailed formatting of fasta file [here](../../README#translating-alleles). + +where `path_to_gene_names_file.txt` has one gene symbol per line, and gene symbol uses its MANE transcript (hg38) coordinates of exons. In order to use other reference versions or transcript ID, you'll need to feed in fasta file. See [detailed formatting of fasta file](https://pinellolab.github.io/crispr-bean/filter.html#translating-alleles). Example allele filtering given we're translating based on MANE transcript exons of multiple gene symbols: @@ -106,15 +111,16 @@ bean filter ${working_dir}/bean_count_${screen_id}_masked.h5ad \ --translate --translate-genes-list ${working_dir}/gene_symbols.txt ``` -Ouptut file `` shows number of alleles per guide and number of guides per variant, where we want high enough values for the latter. See the typical output for dataset with good editing coverage & filtering result [here](../example_filtering_ouptut/). +Ouptut file `` shows number of alleles per guide and number of guides per variant, where we want high enough values for the latter. See the [typical output](https://github.com/pinellolab/crispr-bean/tree/main/docs/example_filtering_ouptut/) for dataset with good editing coverage & filtering result. ## 4. Quantify variant effect (:ref:`run`) -By default, `bean run [sorting,survival] tiling` uses most filtered allele counts table for variant identification and quantification of their effects. **Check [allele filtering output](../example_filtering_ouptut/)** and choose alternative filtered allele counts table if necessary. +By default, `bean run [sorting,survival] tiling` uses most filtered allele counts table for variant identification and quantification of their effects. Check [allele filtering output](https://github.com/pinellolab/crispr-bean/tree/main/docs/example_filtering_ouptut/) and choose alternative filtered allele counts table if necessary. `bean run` can take 3 run options to quantify editing rate: 1. From **reporter + accessibility** - 1-1. If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA accessibility score, - ``` + 1-1. If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA accessibility score, + + ```bash bean run sorting tiling \ ${working_dir}/bean_count_${screen_id}_alleleFiltered.h5ad \ -o $working_dir \ @@ -122,8 +128,10 @@ By default, `bean run [sorting,survival] tiling` uses most filtered allele count --scale-by-acc \ --accessibility-col accessibility ``` - 1-2. If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA chromosome & position and you have bigWig file with accessibility signal, - ``` + + 1-2. If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA chromosome & position and you have bigWig file with accessibility signal, + + ```bash bean run sorting tiling \ ${working_dir}/bean_count_${screen_id}_alleleFiltered.h5ad \ -o $working_dir \ @@ -133,15 +141,18 @@ By default, `bean run [sorting,survival] tiling` uses most filtered allele count ``` 2. From **reporter** - ``` + + ```bash bean run sorting tiling \ ${working_dir}/bean_count_${screen_id}_alleleFiltered.h5ad \ -o $working_dir \ --fit-negctrl ``` + 3. No reporter information, assume the same editing efficiency of all gRNAs. - Use this option if your data don't have editing rate information. - ``` + Use this option if your data don't have editing rate information. + + ```bash bean run sorting tiling \ ${working_dir}/bean_count_${screen_id}_alleleFiltered.h5ad \ -o $working_dir \ diff --git a/docs/_ldl_var.md b/docs/_ldl_var.md index 7eb1af7..f81f714 100755 --- a/docs/_ldl_var.md +++ b/docs/_ldl_var.md @@ -43,6 +43,7 @@ bean-run sorting variant \ --scale-by-acc \ --accessibility-col accessibility ``` + See more details below. ## 1. Count gRNA & reporter (:ref:`count_samples`) @@ -58,11 +59,13 @@ bean-count-samples \ -r `# Quantify reporter edits` \ -n ${screen_id} `# ID of the screen to be counted` ``` -Make sure you follow the [input file format](../../README#input-file-format) for seamless downstream steps. This will produce `./bean_count_${screen_id}.h5ad`. + +Make sure you follow the [input file format](https://pinellolab.github.io/crispr-bean/input.html) for seamless downstream steps. This will produce `./bean_count_${screen_id}.h5ad`. ## 2. QC samples & guides (:ref:`qc`) -Base editing data will include QC about editing efficiency. As QC uses predefined column names and values, beware to follow the [input file guideline](../../README#input-file-format), but you can change the parameters with the full argument list of [`bean-qc`](../../README#bean-qc-qc-of-reporter-screen-data). (Common factors you may want to tweak is `--ctrl-cond=bulk` and `--lfc-conds=top,bot` if you have different sample condition labels.) -``` +Base editing data will include QC about editing efficiency. As QC uses predefined column names and values, beware to follow the [input file guideline](https://pinellolab.github.io/crispr-bean/input.html), but you can change the parameters with the full argument list of [bean qc](https://pinellolab.github.io/crispr-bean/qc.html). (Common factors you may want to tweak is `--ctrl-cond=bulk` and `--lfc-conds=top,bot` if you have different sample condition labels.) + +```bash bean-qc \ bean_count_${screen_id}.h5ad `# Input ReporterScreen .h5ad file path` \ -o bean_count_${screen_id}_masked.h5ad `# Output ReporterScreen .h5ad file path` \ @@ -78,8 +81,8 @@ If the data does not include reporter editing data, you can provide `--no-editin `bean-run` can take 3 run options to quantify editing rate: 1. From **reporter + accessibility** - If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA accessibility score, - ``` + If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA accessibility score, + ```bash bean-run sorting variant \ ${working_dir}/bean_count_${screen_id}_masked.h5ad \ -o ${working_dir}/ \ @@ -87,8 +90,10 @@ If the data does not include reporter editing data, you can provide `--no-editin --scale-by-acc \ --accessibility-col accessibility ``` - If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA chromosome & position and you have bigWig file with accessibility signal, - ``` + + If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA chromosome & position and you have bigWig file with accessibility signal, + + ```bash bean-run sorting variant \ ${working_dir}/bean_count_${screen_id}_masked.h5ad \ -o ${working_dir}/ \ @@ -99,16 +104,19 @@ If the data does not include reporter editing data, you can provide `--no-editin 2. From **reporter**, without accessibility - This assumes the all target sites have the uniform chromatin accessibility. - ``` + This assumes the all target sites have the uniform chromatin accessibility. + + ```bash bean-run sorting variant \ ${working_dir}/bean_count_${screen_id}_masked.h5ad \ -o ${working_dir}/ \ --fit-negctrl ``` + 3. No reporter information, assume the same editing efficiency of all gRNAs. - Use this option if your data don't have editing outcome information. - ``` + Use this option if your data don't have editing outcome information. + + ```bash bean-run sorting variant \ ${working_dir}/bean_count_${screen_id}_masked.h5ad \ -o ${working_dir}/ \ diff --git a/docs/_profile.md b/docs/_profile.md index cd40cb4..47806a2 100755 --- a/docs/_profile.md +++ b/docs/_profile.md @@ -1,8 +1,10 @@ # `bean profile`: Profile editing patterns + ```bash bean profile my_sorting_screen.h5ad -o output_prefix `# Prefix for editing profile report` ``` + # Output Above command produces `prefix_editing_preference.[html,ipynb]` as editing preferences ([see example](../notebooks/profile_editing_preference.ipynb)). -Allele translation \ No newline at end of file +Editing profiles \ No newline at end of file diff --git a/docs/_prolif_gwas.md b/docs/_prolif_gwas.md index 9af45ee..cf1ded9 100644 --- a/docs/_prolif_gwas.md +++ b/docs/_prolif_gwas.md @@ -8,7 +8,7 @@ GWAS variant screen with per-variant gRNA tiling design, selected based on FACS Selection - Cells are sorted based on FACS signal quantiles
variant library design + Cells are grown and will be selected based on their fitness. Cells are sampled in multiple timepoints.
variant library design @@ -56,11 +56,11 @@ bean count-samples \ -r `# Quantify reporter edits` \ -n ${screen_id} `# ID of the screen to be counted` ``` -Make sure you follow the [input file format](../../README#input-file-format) for seamless downstream steps. This will produce `./bean_count_${screen_id}.h5ad`. +Make sure you follow the [input file format](https://pinellolab.github.io/crispr-bean/input.html) for seamless downstream steps. This will produce `./bean_count_${screen_id}.h5ad`. ## 2. QC samples & guides (:ref:`qc`) -Base editing data will include QC about editing efficiency. As QC uses predefined column names and values, beware to follow the [input file guideline](../../README#input-file-format), but you can change the parameters with the full argument list of [`bean qc`](../../README#bean qc-qc-of-reporter-screen-data). (Common factors you may want to tweak is `--ctrl-cond=bulk` and `--lfc-conds=top,bot` if you have different sample condition labels.) -``` +Base editing data will include QC about editing efficiency. As QC uses predefined column names and values, beware to follow the [input file guideline](https://pinellolab.github.io/crispr-bean/input.html), but you can change the parameters with the full argument list of [bean qc](https://pinellolab.github.io/crispr-bean/qc.html). (Common factors you may want to tweak is `--ctrl-cond=bulk` and `--lfc-conds=top,bot` if you have different sample condition labels.) +```bash bean qc \ ${working_dir}/bean_count_${screen_id}.h5ad `# Input ReporterScreen .h5ad file path` \ -o ${working_dir}/bean_count_${screen_id}_masked.h5ad `# Output ReporterScreen .h5ad file path` \ @@ -79,8 +79,8 @@ If the data does not include reporter editing data, you can provide `--no-editin `bean run` can take 3 run options to quantify editing rate: 1. From **reporter + accessibility** - If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA accessibility score, - ``` + If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA accessibility score, + ```bash bean run sorting variant \ ${working_dir}/bean_count_${screen_id}_masked.h5ad \ -o $working_dir \ @@ -88,8 +88,8 @@ If the data does not include reporter editing data, you can provide `--no-editin --scale-by-acc \ --accessibility-col accessibility ``` - If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA chromosome & position and you have bigWig file with accessibility signal, - ``` + If your gRNA metadata table (`${working_dir}/test_guide_info.csv` above) included per-gRNA chromosome & position and you have bigWig file with accessibility signal, + ```bash bean run sorting variant \ ${working_dir}/bean_count_${screen_id}_masked.h5ad \ -o $working_dir \ @@ -100,16 +100,17 @@ If the data does not include reporter editing data, you can provide `--no-editin 2. From **reporter**, without accessibility - This assumes the all target sites have the uniform chromatin accessibility. - ``` + This assumes the all target sites have the uniform chromatin accessibility. + ```bash bean run sorting variant \ ${working_dir}/bean_count_${screen_id}_masked.h5ad \ -o $working_dir \ --fit-negctrl ``` 3. No reporter information, assume the same editing efficiency of all gRNAs. - Use this option if your data don't have editing outcome information. - ``` + Use this option if your data don't have editing outcome information. + + ```bash bean run sorting variant \ ${working_dir}/bean_count_${screen_id}_masked.h5ad \ -o $working_dir \ diff --git a/docs/_qc.md b/docs/_qc.md index ee89c3e..7d00c86 100755 --- a/docs/_qc.md +++ b/docs/_qc.md @@ -30,65 +30,3 @@ bean qc \ Above command produces * `my_sorting_screen_masked.h5ad` without problematic replicate and guides and with sample masks, and * `qc_report_my_sorting_screen.[html,ipynb]` as QC report. -##### Optional arguments: -* `-o OUT_SCREEN_PATH`, `--out-screen-path OUT_SCREEN_PATH` - Path where quality-filtered ReporterScreen object to be written to -* `-r OUT_REPORT_PREFIX`, `--out-report-prefix OUT_REPORT_PREFIX` - Output prefix of qc report (prefix.html, prefix.ipynb) - -##### QC thresholds: -* `--count-correlation-thres COUNT_CORRELATION_THRES` - Correlation threshold to mask out. -* `--edit-rate-thres EDIT_RATE_THRES` - Mean editing rate threshold per sample to mask out. -* `--lfc-thres LFC_THRES` - Positive guides' correlation threshold to filter out. - -##### Run options: -* `-b`, `--remove-bad-replicates` - Remove replicates with at least two of its samples meet the QC threshold (bean run does not support having only one sorting bin sample for a replicate). -* `-i`, `--ignore-missing-samples` - If the flag is not provided, if the ReporterScreen object does not contain all condiitons for - each replicate, make fake empty samples. If the flag is provided, don't add dummy samples. -* `--no-editing` Ignore QC about editing. Can be used for QC of other editing modalities. -* `--dont-recalculate-edits` - When ReporterScreen.layers['edit_count'] exists, do not recalculate the edit counts from - ReporterScreen.uns['allele_count']. - -##### Input `.h5ad` formatting: -Note that these arguements will change the way the QC metrics are calculated for guides, samples, or replicates. -* `--tiling TILING` Specify that the guide library is tiling library without 'n guides per target' design -* `--replicate-label REPLICATE_LABEL` - Label of column in `bdata.samples` that describes replicate ID. -* `--sample-covariates SAMPLE_COVARIATES` - Comma-separated list of column names in `bdata.samples` that describes non-selective - experimental condition. (drug treatment, etc.) -* `--condition-label CONDITION_LABEL` - Label of column in `bdata.samples` that describes experimental condition. (sorting bin, time, - etc.) -###### Editing rate calculation - * `--control-condition CTRL_COND` - Values in of column in `ReporterScreen.samples[condition_label]` for guide-level editing rate - to be calculated. Default is `None`, which considers all samples. - * `--rel-pos-is-reporter` - Specifies whether `edit_start_pos` and `edit_end_pos` are relative to reporter position. If - `False`, those are relative to spacer position. - Editing rate is calculated with following parameters in - * Variant screens: - * `--target-pos-col TARGET_POS_COL` - Target position column in `bdata.guides` specifying target edit position in reporter - * tiling screens: - * `--edit-start-pos EDIT_START_POS` - Edit start position to quantify editing rate on, 0-based inclusive. - * `--edit-end-pos EDIT_END_POS` - Edit end position to quantify editing rate on, 0-based exclusive. -###### LFC of positive controls - * `--posctrl-col POSCTRL_COL` - Column name in ReporterScreen.guides DataFrame that specifies guide category. To use all - gRNAs, feed empty string ''. - * `--posctrl-val POSCTRL_VAL` - Value in ReporterScreen.guides[`posctrl_col`] that specifies guide will be used as the - positive control in calculating log fold change. - * `--lfc-conds LFC_CONDS` - Values in of column in `ReporterScreen.samples[condition_label]` for LFC will be calculated - between, delimited by comma \ No newline at end of file diff --git a/docs/cds.rst b/docs/cds.rst index dc4ea75..8b38b09 100755 --- a/docs/cds.rst +++ b/docs/cds.rst @@ -1,5 +1,5 @@ Coding sequence tiling library -*********************** +********************************************** .. mdinclude:: _ldl_cds.md See :ref:`subcommands` for the full details. diff --git a/docs/conf.py b/docs/conf.py index 6b99fd5..58daeb7 100755 --- a/docs/conf.py +++ b/docs/conf.py @@ -7,17 +7,28 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information project = "bean" -copyright = "2024, Jayoung Ryu" -author = "Jayoung Ryu" +copyright = "2024, Pinello lab" +author = "Jayoung Ryu, Pinello lab" release = "1.0.0" # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -extensions = ["sphinxarg.ext", "m2r"] +extensions = [ + "sphinxarg.ext", + "m2r", + "sphinx.ext.extlinks", +] templates_path = ["_templates"] exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +extlinks = { + "git_tag": ("https://github.com/sphinx-doc/alabaster/tree/%s", "%s"), + "bug": ("https://github.com/sphinx-doc/alabaster/issues/%s", "#%s"), + "feature": ("https://github.com/sphinx-doc/alabaster/issues/%s", "#%s"), + "issue": ("https://github.com/sphinx-doc/alabaster/issues/%s", "#%s"), +} + root_doc = "index" numpydoc_show_class_members = False @@ -27,3 +38,18 @@ html_theme = "alabaster" html_static_path = ["_static"] +html_logo = "assets/beans.svg" +html_theme_options = { + "description": "Activity-normalized variant effect size estimation from pooled CRISPR screens", + "github_user": "pinellolab", + "github_repo": "crispr-bean", + "github_button": "true", + "github_count": "false", +} +html_sidebars = { + "**": [ + "about.html", + "globaltoc.html", + "searchbox.html", + ] +} diff --git a/docs/count_samples.rst b/docs/count_samples.rst index db89732..d445879 100755 --- a/docs/count_samples.rst +++ b/docs/count_samples.rst @@ -1,8 +1,10 @@ .. _count_samples: + `bean count-samples` *********************** .. mdinclude:: _count.md + Full parameters ================== .. argparse:: diff --git a/docs/example_filtering_output/my_sorting_screen_masked.filtered.filter_log.txt b/docs/example_filtering_output/my_sorting_screen_masked.filtered.filter_log.txt new file mode 100644 index 0000000..e58a02d --- /dev/null +++ b/docs/example_filtering_output/my_sorting_screen_masked.filtered.filter_log.txt @@ -0,0 +1,5 @@ +allele_counts 400734 +allele_counts_spacer 210363 +allele_counts_spacer_noindels 207500 +allele_counts_spacer_noindels_translated 193445 +allele_counts_spacer_noindels_translated_prop0.05_0.2 31517 diff --git a/docs/example_filtering_output/my_sorting_screen_masked.filtered.filtered_allele_stats.pdf b/docs/example_filtering_output/my_sorting_screen_masked.filtered.filtered_allele_stats.pdf new file mode 100644 index 0000000000000000000000000000000000000000..18c94c2bf0d062af6be4a6fc420c968d19818bb4 GIT binary patch literal 74478 zcmZU52UHZ>()INkP?8cvK!S*5iAoZMX99@|C`c9%5JrY9l1(5;REd%8?|!&aPd%s^PhHO;K1}}#mbxK~I(gJ-S|3w+HA1K

J1c2Bn>t&ZI#2wETc*y=7LMpslK795qS_Bk?^~m- zPDw#m9qr7uEu2pofX7}_1g2O#c0MJlYzs`d0{!n*=zo<@8IhSI{{JrkZ#Uk0M+;yb z(R@)Y3nx1lM{}?qy#3($>K6B{O|RHJ22T_N|2cnNOyr!btfa&#aWNSg=>Hl4XMh!g z+c=$)CE9rzjkW`y#PPo&_X_?p>_#;Uw3YLNQ{vF06|EnFg`W~tdS+jWnOvEfRn~vDgBAw;b;FlA1JBbp-Q92 zxVc`B*8dtax6W2_XZ#=5x8JXIYR9~ulBJtAeN8vHTe7z@rm#01s<7Lwu)VvZu#3eG zdF}LZ`nUzo`|#~;O<(%D7r#AkGB~!yIqsuSdT$fc3&ITC(tygTVeOC z$={9cy{*|D~gClgoP}7Q45*JHIzNmFTm*S-)Oe*2e7{yMtT)*e1F+sP18-in(Cfz!F zuEfsoZH#U0t?sVRkGvA-lG2}9RYzx+?wUmHwO?iDo_IH&>ErG>u{A9;G??M6X?`>I zL6$Dt<$o0}l`l{)JzyDKeX3wL{#4=G-poL-pc8%Pqm)y7Y|@=4Il6y4to?m3{IoP( zf=_c+w~2eLDBXLMWl2&iQ9z#c@jbhY7UkRZ5&Cb3mef}n+GH@dEL#_QD%d@=Ei~R= z$Ucwrx6t0HIkzfQf7&{crawpe&g9B$R^tzz<8GF28QvoTH_fCSkm3x$`5`Rt7 zxM)&K`sciJ7yr?o4tZ}LyIt2m>fy`*R&V%%!h3&RQ^+|`;@*;9`*JVdoxwuI>|Hj! zMYK)qG+%;*U}JP=-D4*E`oY^VZ$B~xNLc-%RW^AX;v6y9TR-lC8V(^WB5TPgIc+Cw zCBXdfby|6z+Rcx{jirqeLa%Kl>eh;fvWC+6C0Q74j@+sY_R!|hFcZu^t<~%j%UNbm zozt|fyL`5da_(2G;9L6c9Aoj?GKFqWv!cEBPN$ZvhwS}D(t4IWxl7eAw-2GSAC`UY ze?F}uK5?sney%_EY~J6suIf%RRtFE;WnYC4`i<#t=;e#f>Dln)YSPz77U)Ww$oQT4 zsi|t6n)O0%owxbZHJ!Nx4wasenK zLN;I~Y)qwf>(sXIRQSfy()q}&rzh7^o8qpyG|9x84H16OeB9!!iWh3w4|qJy&W_tq z+k3viyqzyT*-+hY;720ZR5f6d)mO`Rj{h6Drm)Cn#5=$-`S|b9M`_K}GpWi|jq7$V zKZstO5cu+8ZSn8Kq)+nTwV2obld5wGx#cFyz7w_SEo=0S=v`@oO*W;^f^xUEBuyS; zqQoUuy|#1KyPzQK#oV&_HI%(sl~*eisbxOMT4+iL+O6a69E4w}Y;(A8J(e$$gd!(I z)i`FQury(_>djI{dgLG!wr4VyU&(fT<&2bHJiGX&lHd35LqbG>^)0pK9AueI$S`>v zDX@M&iZe&jzPj~x`rD69KP*}b%Pp3Dts<==!sG`(7aq4KE(D{nv07AazU-S;6PVRn zHtmCV`i*PL5h^DMMp?RX#9vQPklrKuHs5fm)YhkblB&({{zj(D^4^QV^D&_hx`bY8 zt;wy(#itvk@Vb4KADI6Y%P&sf_Gltbdm!|B;^S0ji=w2^a*_URyN+0XZTg?ySynY= zoI&!7YPk9P=Yn#NLji?pJLxCBt~Ae=AYgp`&|fX=Av6ebfCQ^nWj*Vz56Tt{=lNb~ z-fTOB4}Pb=YfR5Q4Om=!o=?_U{aHHG+gyL%XMWf(zR@w$LMXI$aCw*ZTd-)>>*bBd z`aSv^<8#h2UF{Jk_>yXOjNYA0)b#V!clpP&!+wl#;oH)`DJ?r*;DV`f@^zL|1*~)Z z@ghI|#j()YhKC)r;lXOx=nJQ4A#6IMqc>?r z>u>FfzaDZeRzpp=-oHVO+HYA? z90eSAKfNz zPz4EV>uwxhjjT&cjMrGv#I-NK`#UB*aB^OE_FP>N(YVOpsjD@5_Ye0w&l^%Z+HfWw z_wH{E_V}5iuPSYnWVty5Zj8I5)%d;Y#3R1u50MYcs%}WmQe?>4>E7MH^h*_5Ii_u> z_Up}1>9}l`*dTh3BhqskkvD|91>0h|=H~ys^ti~;dg+ao(1_naqXdYS?1A3sExF4_ zcMI+8uw$ELz!$oH?|Zg((chnUXHLjUz)`}ktCCf_ zcTUELJ5*=VxGK2hEsxgdyXVwTEDpLg4Z201q{^SndU0}%S2ZirHe7c?wnFZTD~IUj zrP+h}kh#2@6M_2&>57+~CEbn>EyMdEZ6a~f<+0N5*7@?HHrD>#Nv*6D19^?72j&kC zxV_o$pu(AE{L2Q4Y@@NAhJ}#t@k61v*ZUSdKbir{y#A!uQ@+eN>BE+R2J5<2i;u&m zk9pNeGj*JBz=dRDmisHfzbx~J4jA}*&;VyeSql&3PlcWQD&Ra7>aqSvE@9p%m8Y1; zFhA|zdCGy!v4G!?Fjw%kK8$siQ{5&k1L6tJ5Q30RuL}*^P#9h}pXjTUV7_aV?V% zKDIi5v!WWxk<;VNzn`XdB&XWriYwS(PM(cYyO_w|I-4gprxy~4KOS^W2Mg(D&Z_`F z=CCmPv@;fDYycn8>30qvaydWFZOhBcqwMA6!7jvR>;3)v&seI**gC~>-l6iNmH-k0 zsTEyTc5b( z;F^18$1z?v8n>^=U|?fR?>El!qQVhzp&VOBZim)_a;DFXopA)z(PEI37mM?zVr^rObK~@zm|e+k9>8jn?3!-d_uY><*PD zuD)~I-qFQFAyd_i0OxFNF*J{Lf43rWu_l!EYuJeE?Xr9Sbnb?#>!;=CU7yS8C1kTJ z<3$3?ou_#8x_T(2g#(va@n3k~H?dW9p>aIb!Xf#PUGe$db|b5&whV(iMax@BGv0C` zNACc$c{j^?*H2I|O->ZP<(ZB`l{K9`jt`!Cqb-+n3G;fE`45|U_FsMK>Z{h;=aAMs zDmvhPM;XLiOkDS{MpUgyv2DEJxj(vrd9WEH8bstTaoSBz=fpAA61LWLM8WmIFtXpan*uORM5a=U;NaC2oo;wlO$} za(*uw_TJ8`{1f2raFnn|sVN^B+!L409?@QR^?5z$^LGN2FDo2Fdm7Jz)_q?4Y*nAO z%QvJys-f#pEm1i>kKJ6`!fxz}+U=d%lm5D=7uJ`#D3~14Zo|>;YNtz^U%R%8lqnWQ zB}+Rm%e|t-3wjk++CVg*jrfBwd1swZ#7|=kd~OO&pD|u6}>!@ zf_>LpAK>M!8q)Nv!@INH>e)?e??tDu)t;GSbsv-KS5CgIS@3r($ro9^9h5T>IgWXN zis5y2i?JK(D)-pKCHm|xPJv=<&&PYaem!v){C85R?xDzme~_$P5_>v)}h;`a7p z;<&E2dmHC`PPP-r7w3)X+TH2)Sbpm1Io#AxkL+b?O%5&d7iW*Izd1_RyZc#Rdc_LI zYhLuXh0`KLs996=g}bMk*ToR;q9J|vJ=M+mp`(1|TQ?PUmlJn4#(Z|F=ZE$-sJtGR zwoJ4NX`5xgT`b$dVi_|EKXK15H`}q5z3jhG9@D2gWH;`K8>v=38nHO`zs;XxCnSsn z8iReduQW+x=Z8E|qL=!%w)Qsv25&p17fm_ZExP*9b?4~qhDL5)kZ3M1FHPaVFd7VG z`x>yxT<(|(_Fv8G^! z>@<%OuCXg6gEcY#`G?w1^lt5XZ`MuxPUj36LQlQ*=uCB2l{3Ct=H*jcv>2nJ649|3 zU(#vmuIh2A_LJ{#qpeCS%89X0-M8uk3IA-65Z+s#o+LF(k+}3hfiHbb&NcJfO5~%G z@gpgG-@O-Da4l~;7e~?gF@x=MODS1@x*Pg8f>Oq7W*$3Wd)4f$+k~3-*(mV+sIzJi zx6-P2ozsb(4k*}GeVg3AD?eM8_SJqS2He0nKYg%WL)Q?yulK0D0w$md{(W#OL9fEq2duDZpXjkI8Sp}XV6l)9%Gw(3EF=hk1U z>p~@;pX$k>eFLf`5|(T&d~}Bc?A8}|6t{=!Yi9clXz4FS6((M98&$lnky2EfYdkgC zXufwX_?z2Fu$;Q~)+lNwmuCsJZtR4Q7+n!rtM7R-+0|K6KkxR=vWi#d&)Bx&>@&Ze zk6bHkzp+2`0n?OAVW%als)uoDYH^~y*I43B?Y`N^K7U8u-?NWJjPK3jPVh?GEM=%m zMm{R;RWtSBD3FD2IPpq&&8xC$@+&Ryo4IxN+sS&?%Wb3Z$8|&V46knF@nacYUQaCG z&&OsNF}JP^wcWkvm`t19d)wT)KC|xD+Rc)_xb6|1SnIR1&fn;?4qOUczR+)TE;z*q zqs8k<-v&Rc8&&6$-)4k7Y+Wd{2-BE9tq1?wAuE)7PWNgq(bi+LY$BU>PJ3ejx-NXR z(GE^w&z4tuel@BQa+Ps67qgp5AN2LRy%RHTHPr5~b4rW^R#x3=)Jc!aT%|qHnh!f- z`Blo)&UtewqA%YYRdv4q`k{BQ_gs`eeuMc+3RA!gXx-d&DyteEx z{gD5x9E@KY*rw)u>E^>4d?bC`k~HuYis*$GCSYnaaI^8D6XDBTy)LD%@BH+>a^o!^ zb)BiKs&Ym}-JcV+Dq%-u)4XgK`i;27z0tHt?YqZ9wzPX9c5FA;I0O5ouTx2R%dhyG zn>rzCICL}I9)Yj)mF^U>@2yMyH0WKP5m?{p-6u6ASp;I`eW}J*d5g8))r9Rwb_(eF zol^Bx5F77W-Z6X;Zbdobqw7(TnFa%`(al{KI|aM?y;A%EEPeO2;I~7!_d*-b;ZN18 zjt9C8dUq(_h&@|-J~TI5N;^e()>sBlrOU=c;(e|eXf?4*t-W=8xV?7Dr$1ziLblVO z7q`uvGn*#Yx6%EaZDwKTR2l#Xqddh8|5v_l%IK7UT1Szni}yzC*DA1bf4#YP=dDHy z!ZWv3nYR-6gw?1VGu6&SI+i;=&s>d(mKxECxp8*FA((C0?*7qjmtpUI|GhCO2Zjk3 z-lxZ^y#JFB6K%+pczd@Amy31!V|Bb|V@hLY+45_4hGU6Ee0I3i!1{{RuFJ2%K6~$e z097RoQLX3kTg^*26j-4(7J8EZz4LQ19c4IVKinGmjjGFN?m0r+xg?6CYR0UOW3Tp( zJ?iId|A>c}k6v>poIlHEHxiEVW=8t@0r#Wio-LaElkyaJ@e3iE2iwt0UY9D9n#Um< z)>U^MBE1%*kZ=`D%HMf&@#LQS^y*jk_3YA*gIFy6xQV;aRsdQU-8p_c76s1VM7!Dk zS&F@j&bHXGov=Ev$7PD2oP0D(7h|Oe2w>2=s*+sL{s??&o4xLW;U3zlG-Uu|ocXot zS3V~Qj(HcEax8#Z4qX*VUI4v)rKQ~?+k<%QHePZ*5Vb#txTs^Z%-KK~`;61;|5%+V z)p@rUw=&K%pGJp;O`dp_RKd9kW7nfnn>OyJ2+qyv@)t>waBeI^d}`OCVmc(*r4>e?2WSudSm9l z!z(A=7oa*g>g#`u54mSW8id4*S9HDVpFCF|{F6RZ zE=?q)W&M2m(y%UaD)8sU^rm^MhLN!axd{;=*{FoE3lG^i50o?AD7)r8V#)3%&oHo8 zovoy=Fiq*y!du_#+;V_t05kt)-0g;q_rPA>2bb}ii_SUGKI^+Yn|Jeau4r1~vQU(lp4DXQ(yF5Z#$;{CeI%+odqdQR zV=KJA)ZvU?lpU=E*V-46+u8~mtMpAHeyi>hd&{AFIG??pWsVXPC0_6HkRY~|$v?BD z5xMRHm%I#JK634D`Y9RNZFcu7Bn-1`KYrw6RH2yAJTy42FuCBMm(*3l#&pFRrjyD?f&lGKO zV5BcLNlqx+u+yNi4n%#cDVaCaWnV_x?-L2Q={q52H+N31@-_usb2d^J3(g7jHggjx zsSB%~{kcb!mW`q?IAwZ;I|?~!dYtpJE0DOxrx{VBjXsUeNG!yV5Nn~iRYr&M?L4(L&30R0Y@1_n zw5125eHuZvY})P}@9X3J8&J|8DloOV81*c6kEoCr?-tN^B?c#epR5-oTvNbYdMr8| z2$XHb(-$yh#w+OTzOn^YKlf%%pPs^LygF*RGHZ)rxcluqwsC~Y)omYl{eLpelRiYf zF?BU+Dbls`W`E$t{FX5Jx+DXlvjS{33mfc)j0?R+jK?=Wth}D=s-PiA^u3r4?T|hy ztmxUJzfj{nHeOP&3cAXdq=Uaz_mF(GT8jM1LUSOSPWKs5bEZipI(bYy8f(tz!uS|^ zKUxSN$bKiYW4emcq)nGRx9SsmlAoV+a5eq1H2NV9%Umuu!_EEX!pss z*u+zj#c!G40agkPx_uu^e9pspJN$TOTXO>za%Q{TsoZ=F=32Wu(@<)h<~2KyASrT; z^=g9J|JDPWg-V#UwwUQSCHo735W-WeTy}ddZ6|xgb+=-BgNz1=E z^T&F;)bAu-i@7G<9Q^5K`)ska$hsMAa$7DC?+6--y6$faP}$J5X8}rH{WpB?6#dS&#C2^WM9KIdPsU)RgqYn+==)e-zF3kN1s0OmMDOlssNf!QLJJRG*n2y=!rVeB}$)ohY4@m%~5CgY1yCt zW_}ccUR@MzOrM>^MLlUhFS?-_O~rQ zI{3H#rBssNO@hv6q+IXL*%hdl<+-n9m` z{77`k{Ra=WuDt&SX^COPn#7tR2@{c|fEWrGAx`x`y05>P`$8=n9jDQdlIGU_w$>|7nwC9STcmOJXvNC7=Mt){j6XYg;DUzRjcOAG zFX8N#ADIbOxaG7VF$KG^zyIvGx3rbXPjroky>6O5YY`CdH_OBwv8o%)^!Hrd3HiFP zoGqK2^{*PSk1hz^+l*jNF-dMno{AZLn{buUO)XO53d^PV);HbWJl8^XZM1fm_c>Hg zF=sW~DYKPExg2+ptJ{cRmSD=)>po)7DP9ILFUIzif~VKWg_6E#$xl|kCbG(j4i~=O z9sj+%^HfYpWQls=WNZ6|L7T7DHa+WOs3 zHdE-WVc}E`T%Iol9{q0XhTP${>?mD+tzXYnX8tmlfAvkg_|)b5cH6wF7Z&)bv;<=n z*|s#&>GNL+NE1yuiq6ftIh)dq!*^uoiM>ux2qc#KlD)f z2(85r7264mLvc_3-S`%nKYZ&%{%zN~)!}PKfqCw1GiKW81_?mW?n z+tpZq{g(CO%oWeh;N<#$xc$EA(a^exm(8RO_U#7DF<42;bkuHS#P)?5Tow+@V+A+z z>=btS;+3^k1AVhgLi>q8_2j2RFN>K?Tnzm3XgI`#DwEEB(CtpR+S`rMhzlRS#q=|C zw)p-x?=sur#Qo!s57=LeECvd`8CT6(E=hX;oZ2@(n znuI_mXmxNHU-zh@%8!%L8NPMAI`faex}{fmt_(08{{R;Eif%dR{-OgejkFRM-^Fzd zYn}jN^dn#KQSYZ>u|#<__zGJZH2xo2xwowrdBv^Amw zF;3jcFB+9;I9#}P+h=jxPtB`-1`~y7u&JftJ0FtxT5aq<1}@%_mNcBaBXs!>pO zaZy*U3C9@hmq@L3ZCOruR;vVS<(_T(Ff-Z`A7WDMblxyq#$M~Wl97LQu~SRoe9HdvojG}Q{rtQLU_uUA z=QO368HHPMcxgWq{fBEV?Y$gqRl0A85Yx%Me%W8>dR*(ipIQT7MUoHxtf^D*aRtq` zza`-4xzcQni=*!8gk06Tk&Th$b4v=*IqF@4nwK71Pq;3WZ~M%l)@%$r)K@>du~T|o zxN{a1m|FRKtuqdIFSx$AXdh8U4A{LCIaQAPHDa>qmB}JCx&yLJHFqdu330TYB4=?W zgQwa*XR+_;rh}YuXp5Svi+Lu4u7K2TdNT@mR6iqjJVJ==b;1U3vx+@9^E1Vmf}Mq{8BV0 zc5J0mE&sN(isjv88GD^j!bYci$31hxO2B(-sP&TlRlJYS89U&vr$IWvN{t2H)u(xn z2!}gM**Iz5X|&bOb#Cm@_F&1!lw#pX>g>Odynk8%Fu;2gH~!z&e}&7jBKX5-Q|fH> z&54soBd%i%oQ}*nW|u08T-V*5o6}pfGCSHAI<*E|c5J>fx}%%f*(y5jC)G-WlEE#?BpVc@nzm0<1DJSL){4qZDJe!`)RtvzNM zVK$Y>&RLZn=v;sm?Os2e~gc)Mm zLodRL@wf}xK%$!}GI!#93H>~Gmtc!Szwig`*;PHY>;l|-zpYiPn{jyLAIn6ya#i>N zV<5oBWek&yK?jQ?H}&ka6@3#ftm>9yD zC2OhLG#>H=FlOz|y;~PyB%!AjIpj48J>G-!VC!pp*qE0Wr5wINC)&itDnc$$je&`n z8&t7PVJ~p$Op`qLUSp?Zc@H<}^ zxx2#jUuu#t!>PvQ)qXz7#~r>K8GVX#M--0`F~hTSR$_Pb0`fBqPAjbb6O8z+f+p7{ z1p*22^4Fpdb8E(5OyzDI7T?p<9f&rlvxQG}r@AuwS$_$%hKyMAwn7b4CkVKCRsv8= z(5{FM$f`WOyjVei|FW5;6B>qTpJkyW*<}?&N`vTmu3?g4A%1+lx#A$#;nTF9d4&-r zF^qv(APc)x@S8deJ|o7z1|3!ac8YYPf4FHl@&GpA2gGDyE>-!CTqMNb*n^FP%<9r~ z_k+C$C_?s;Zsd+wY%hfx0}^94)u9*OMMn?-6L;43zJ%&sB7G3;bMWmyhtVdv>n}4| zNWV%ZTim3WCGt1`@K%+i%`&KqBlD!oi&r>C_}P8#)G})DfkoTp=pZTWj%!Cvf*o}W z9^$7v?-(~UmcNgvB}Dg5ZoCB7gg=fEsx0nEr}huivs1tcx0c=^9tlh*e)gMaYvMNU zwZ}`2T&RWFjd1d#i^52T?-G&z2Y+ISRIJH0Y(IV4r+;5&csxEnn{Q?K;j=8nS@^ve zC5-RJ0e^urKi9%N#tVhsE*8sHb-bO~$-`d1Kcg~6Bs9BNylEv?vl~7^+R=H=@OJ4M zZJPAB9)|cvxpUgM-L>w~4~IgFkD0hM`@0Nr$-wzJKkb&FjUEJRXq5Gy_ToMWt!L@) zo16w1OT?q(@q+ndaWW_(or+QINA52=z|WxdR970bC-B|xJJNNm>+H`Es(EFWE~Fd@ z@1FLutM=oNDa#K^EB|`{pM#Y3FZd@w!QNXO^x~rhY-Uzf{d-y{j!>fJ=gll&ySUrF zlG`;IbU*wv@g63{%Df+Lt+D@$5IgfQE6t94_z8?=|Hnt$CzyF?iIgxC&5=GQcL2#n zD_?zvXP>}4FA`UF#U9RK2EvZRmxThM95$PBKJFDnobI@ellwvLZT}$zC&Byym(<2a zDv=rkT9>ry^>UcV-2hHLTB7|9N0NH-`aV+ZOv*R>xsN!k(y<%ftSpyFFW=!Bn0-pr zd&~Y{fZ3-i{}yc}obn=us*6ng5u(`2*bH`r7)3tQOfg~OdW;~q!(8}k2J%xtWWtj; z6$4_ciz20V~vAL9N8FM3dzBHAF-wT7I{Gm|(EZ(^)1P+Ux zVv-A@gAc8o7OKz;LB?}y;SJ2D#25g4>i8K7jMiPEr~s1gYx@WUk?Oca4MvJO;i^SD zkwq7QB=5NCIaI|$eSlycbx zjvJ;RK*{nmjx5a7c|RCBL{t%_3$T5Wx9)`_gjqA;D!2w4Hc_%Tro{{M4FlUkB~$p} zjyIJlzvRLPthkJB@*4bb+oEQaEONL965Q)yQtR2tu2~iq#LNU$PIA@1X<(zbqcB0w zp9j(N5)+#$)?}&4WmwP`sU^6_sed9EmCCUojxy5$haGTmJ;g)#)e3-olB(OMHCA(C zAM6$bRl!0PWQT;)^h|GkffH1MV`biP zruGgc5_2Ab`%;kvtiB{{|Bn=$+6+DVMdRJ!!>2k;gWp(vVjxYv{@1NRABHm3gR%pJWkHZl)2C{7H8 z%3oU>ftz@CL43HY7o7+o9-Tz8CQ!skMm#1jlI08o!GqmMWa=9C9U#l^bT+kc`UQKp zy+QkY6h?vgid_Tdmx=^EnF zV-ClrNwKEihXZ_NSTWJc__NB{n4B!3LrI^AxwW)6^&Q_QZ8kW>4ZG4GX*R?8OI3uS zO8_FEnP_#~HAxcs3%^nSyB~`1zH0r&E0A;n5a~?fWd)=RSUH3P6#}s~1|T{&OI#^_ z;OZ3ipHRL1#DS|BRvhb^W)~bq+OJKn;RBVplhRRP5(rLb7@Rqbw;0Mv@61?91PpUA znVQT+UYDd0CI!Ih{Jr?m8i+21ydGKdf{Tm`9todS9fk>|xOa~wOPGo>8EL%R{KEDX zywq3~VRrAUa5|BmVgmPs>x#$@n`fkmMum&|UH$=sOl(j&JIr8#i`eM81VA;1*E%xM zoQ_mt>TsaW{btZewls$hecrdO#{(=gA{hDSZ`$oikMZO~!iK)#YtcaRfP3Z9T!c72%x5Gc zj_$sK`|jQPB4dXiS5`I^=Cu;00LvGDrApSw)EQv zmt|!$ldG~^By7aiT(l>#N)$f}f)FOfdDMpB7(#Wf?QO$)Nf-(TaWyc@ch6_fil8Lb zWUa-R6M_0rP5`){Usgv!LoP2&ieWdgzah$D0d*t%s^$PVRQ1!0`b|}8wfvS5u*%2lrS%s{!hLC0S?oE9V?Zgy&Vu11f6+!N~dXvDD_?{pj+o|tN zgAr6{vK^Macoa@Uw8GV_kY)gU^ziXoAOlq68YsR@(}h);tkSXehNqC~5#fBWi=P&@ zEBjoH7oajw7D#TPM3L|{^4LB2!Mp9j5?qblRsUE!Kq||G;^|MCFm4)E3Rjb8zU+s? z$X$SrlfRFY<%GGb6JOgxby@ye|2Y7}P-)-Swe+^$^^H0ZLLF}?9c7L@*YnY$Ph zyZJW4w7N#8f+OISCCpL#@+7@Vj0$utBFdNnHxEk)JrY@!gmF* z9in$H8o?xGF}Bxg(3VMNmtGrFN9?7@ecc1 zgfUw+(P`+q6O|#KX`Prb$7&K)6r$kpEE6XpqEAs%%@Ysc7@o&K%(IDA^u^umg|%Aa zs9hc%CRipKin1pi{LKCX7)>M~gf5M-A}4XJe}eZG!cdf0Spayz^rB9jn>ql73#<`W z%QFNnfMh;8blX-qMEzbn4`1Cmf%J-GL0P@QuucAho1(@OVlWUY7?W)J3;JqhvABf-SOncU;?bjw0{4U z{gJ5Z?KHa-gvh~B)cnZUbfx1SP!wRYu^wW8_&v6_!QQtYVQUjYWTvRb6p0Mzb7S$|eRh`wq%okoQ-thHudlT3x@4%4e5GHUOhI-wQudl3M0 z4}#ZL%4X`MoDlua#6>%PKk1%m4A)UoSYyM*OhHW#$3L4Y+0Xil<0LPZz{MpxG(C*_ z4J^clgzf(WvJIhJ_33F16}@T@_?C&vQW@aqGV!OETAs@+Jb5(K0cKNbK;Z5F&HpR{l8gNtk+xaYW%-Q*IrOm%rMK`H{F6hiC4$Oi$E zT%Fp2B52DHyB+awI3r;&79BXtpw+NJ55}AE@A&|SF&!eSI&SkEAgT7Ts&NZRf8dQZ za1=ZUGktI_1=PuSxbUQe={rQR;IRMETSpK*b|)^V3X7?-$wUrof;QGHvt$L(En%}t zbqd86;Ihd8^IiXi3nld4NrsU04@$N$_~=PTtoE?LbWnF7&f__dWubsGXum;LS)$n3 zyWq8EqN&bFBGlKUm?68zyW+!v&|D99m)UdUho2)r8A5jmqX#o2%-2`VBw-^3-&)?^ zEr2AbPwCf4Q6zobF&+n7B9v{f@|;vCsWven2aj!~?3vTV7)A~g$?#mxq zWgW*0UBbkUfD%=qIsz-n(wj#~tTeCDpU@1!OS`-6wz?ln?=bTqcAe!WYaXOtbbms! z#7X}I!*x;%-l3H93C!3t49qLqX5s1wMP-WD!in;9^P{>T93zE>KC#u*e3^-~9M_d_ zxlI}bvU}PQF(16ZWO1d52WYJ@KQnJ6^Mmw+*22XjaG4aVO+!{4@L*KClSnD)yZs{x zINfTv4N&IQJT*VU0ovcaDuqvQNM+RLVMo?OVYj`8h!?s8dP+Dl?QD$FLJ?dfrh)8Y zl=c7N|1V$Q?+JmJcEzkY1Eft0i}UuA1S-~1(0GAD1-!%NZhO^P818umpShV#+OE5(r=*WfY>!Yb(E}U_=$^9KM|S- zzavjEX#IBMaGDL7<-taUhij5$zUEPgn&}UNxLpGp~9>hZE7!s?+E_nlAlCEKJ z6et<+;?QTT|jH!?Yub?5st$ z5;l4}#o)eT6L%FET%6q)5rfa3dQy<$r?bSl2a|$4ORyk^_Gg6Y5VsB%vKqbJ;3>%z z1A|x^QmQiI8z;Labe;^pT^mHXF?V5S&Z#jdtXmO7rQ8sAeDo8L%pC|Xf*RYJQ;UPn zrc>85!d!&F3qS1~BBcX+S9jNxB*HH>rH+u);K&4eZ$G40km;#_0l*K{a+$Ita{q%5 zVxQ_9nbyr66_ocDp^UeG?fXUSB6t@`vAnjayF?lI6THuvyJB;4LUrU_1_e=21Vrh0 zKVTq`gk$|BAki!z7R>uSD({dQu30x_LZ{%k$y#bUu8Sze*a#MS5((&A{zPuq%kPch zP_SngpBuUTP*dmW)y_-X^s^G2wb7vQB9mDWFG!W0D_-N52~dUyKji}kjm%z(BMp?) z*Q{h-n3LsU=7tkJ_Deq^-J7_egwv}@96KvK1b;^&681TLBR8w_Dd|#)hOu(UjYGu7 zN3)9|*B5Y+DGfC7Ev7*XoxqFkPz*V&=plNC?m&kUnTNhD{fZ-nEIK`Jl(eZ`tXH0r zva7)na_3nsIS9bf%Pt_*56UB`wIP6g)9CfUfe=9iy+3_~7iy3I$)v@h0&rodSvl4~ z)-{k`eY3!W)DM$7?$1durJ7}pk4i{1$?qU@L!VS(eak1yb8(rqH8A1vd~)qswd#IBab&>(}Y_4KS@%6Z!|C?;TeUZ-E*CnyPT3 zI!;El)5SY>dR7s3O)o@-1(9#Zl@KyAD^M9h3Cl1pHEbh)b10xOr$>JM_wdMrhi5!M zGB#Z8g4;NXF<~k%?;vdPq=))((t%gcdV~NUm{lua14R{l3bcBkkl}>W%kr;15C~>^ zu1C&Ial;zWSOWw8jzk8{ZmM=S6(a9@?GZ6aVRY4SV>xY`0%5`g{7+INV`YED35=JB z&+6*N&96O>Hu{9mKC&DmkX}W~Dp|5hOF}mHAhle0;!p`7V$k$gJ^e|1eL(CS3bhH) z6u^n9+}TQhJ6OgSZlyPkL;{>+@&!I$6Ac4{eN+gFhz_vue$tMUfhXn6YIVOrCs`E>ipzh= zQu!|}Te6Dv&6x$36_{Yhs#?0fhYPVt!_#FhD7d33dHmPK0&!dgVJL-H=`KD1pib*j z3ZbwhsCmFcsw{prh=&w$WG&#l_4D_DyhUihm=v#4W*r5MNti9>gv6PGwldV6xm{O5 z0@H79RViB!VJY#0tV1Zo%8YGMluL zkq}1yVnCCUbp#vew-6;AfYxl|9WP1!h#wS4q-XSPo#CTF;^fCh4tea<^cq>~w)Ft1b&Cy=tsZTv|?oM77EVYRrRa*#jRy`>Gs6{?Yh+7;F%1!nqEL}^0yponiOULu7P)G6f##t@cwmG` ztm8>8va(RNgQSw16yxfvNpz(70eNnpy+k$w8e#W<++oxeWS?GMyg)%xvgDR)6u6;^ zL$uqmF>@sWugOA|iTfVFZx_@Tul-K;!&nP8QkelViIN|PF{s@gx#~hj(q^rx9~bAq z7~SPaM*I6vb<#)R%Go7c%f1}JXe*Jtx0+Q%j3%i5Hnr-c0TFX5GIc>c=?;R#04K}d z{D-N9ESdaql7y4!X>MKwxbCFG z@KYY3-}_Tj4e(t=QVH^^3PXn31U>{I>=#gN#iz;h@GQqSZY#uK-GTPyXtL7LHf1>0 z2;tKZaK=Kk^ z@8?RvQ+~Li>KBJ(NYLNP>p$=#A7&!wRqDv{cxek>6NDt;NF6G&UCTPYhp~Z2ma@J) z!w>2c2Z8&Xj_xC4ic7PF$_ODpN4seT%a$g^%ao?KffL|1MEp6>WkIF@+47JTfH!F9 z#&t-|po#zWAuk=6xTppSRGdeikYA@k+XB@(GrcM*$1RV*L*=uwE_jy{cs9;y1;kOpFv|nBVBiF?3GEmhZXahuIZ!7DHNcP#q zmm;Wjn=ZkoaO1szz^dQ7lL)5(bv7;V0&y0o-1+BmMIkz}IYy6IG7!|prBsr(tLRao zSTZaFM@k6d5gsZJ-&qkV6KEi?{S(o02~dT!xP>3 z7Y(^mWbo4~guf&OrdQHvNehzBKWpNTsKBu(zjI@7C4>^-p+V%J&Voq^qzo&YDY#AE zU-9@v)?b-BEKKUJ02iqvE&{Leth{L?iDb<@;$$yz4E$1j%KavQ(8nk(PQ5_tujuv} zPX3knj0`Gjow?Kk_dzp+F5B>xCo#c#fL0Kh!zQkyo|DQvxo7>9WIl=k>H`}L0J4sh zNCFWZ5Im=aS78vC6|#@?L5NSjv!Mu5>llt_;*|s9;Tm{@tFS<{m8^6N&j2g9CRaCZ zAxWw;k7U1BMOZ?*A}B@@H$a008kCT$xiOt9M!UTH=VyQYOfnER+3*$X=LGz64(6g6GY!b@F6SFkt2Z zcO*Ix%(|P8g1Q(=BeUj_he)0M5P3d?wq}A?{&?W(aL18d;#BRE5?J=>l+s~&jjwQ^ z{kpAHL3&@}n{4AUC21~QS(dDi(iLq$Hv2J=$c;P?Y~J)f(tvWGk~*?o*~M?NbR{hA zLOS2v!*Qn)Xb!j8#rQIss{)L^!Ls5sVFC-{J&l+AaEQbe`?G=UmP^zZ$VNL+(fAGv z;vy$97ulX;ym<2&oW<7Y_9G@|&i&3A^?M3mYW0iyCy&@*Inhmb|C&nvd>(+>BZK#? z-SdNa2&x7YMgmij2(bqfWw%e03kta;KXXI7FTB8Gsi%TEI%J@CjR?hqNRUmLu) z^$RY-UT(8iiGV#Oz6=#nKjDw>+7R~2qt(?NCYjgQ6nKIUA z>CepVpe@J$>L~vC+;F(B&qXzd632L=)#ezGD=`LndVXVeEqXN1ikXL83^ZuE1VrLG zPk|Qzjj(C=fu=I@>Ck1PpuMjAez2rEWtvyT$A(<$1&@%v=c@5F(k)2u$g|wAL8I=E zM;?JYgr5R$?+tXh&r%(#jm~2_0A#Hn!X8&_SPBHLw4%bm`wT|X-BNTI)52~%itB;k}Szg!om)M zh50z+gzofhChF5oNj6O9ZeU_jHpr^yi&M^IimBAV4w*CMBrO}8@{lS44L#1zNC-4z z(QzIBfp^u6u-TNH_k+cSz|-1Ga2#H8f3ystXV0>&6!BJk+J9N^#ylny3)1ch4V7cy zEh{uC%j#}QAt+dY2Na5JZz_2?%P?P$>plfu|13cdX5R&6T@|!XsvHa&58a4cGhZyH z1lT{(3ENoAwF-sNd%7hQ+^C7HQl zryDq07b?<$vr5>-cduB2=!hE(?3xvQ&b3$t1yG+&dZifhMfpaP=Bq8h4ZbUL7wUT0 zl`{R`(jNft`}VaCQeZS|;_``R<-b13B7Pd$V3do`Q8<3KljV%lTY^xG$Sy9&ks0zv zr&972F`RY{y1UrK_>E=KFN49|610(yeK4|8+ukNI{yKQK+g@-|Q^A|aY)xZ!91QXP zcQ)0vug9qte?NR!m*Fsx!f)xg0ox=vOGmXDdDM@1k1K*w_rm>UvM+;o*IWnUP{_qH zTx5rqpCppA(1fHz@M$m?A#21mEsW6*VjAr-*~oux9*Yfx18*0mfw6cB9=Vw`!yY>LkV zv%&$PL*PibIx$Q%I{ZKWEwy=!#l%4m7%z5Atag~-t%2NEf1p|;RJ1Xsenf_1!6_g!%h&&r@7dgUs z3C;|18R~e8p|h;V;1+NKKG@58*nQ8<;G`iumD|8i2fD%p;Ig=R!>y9_dIMn-fmte9 zV(NzQX)_*|KM5+!|IU7J?Uq0piK*5=nWA9M>bNJ}F~H>r$kAm$2D`5K@lF`y+4H40 z3g=+|v`WyExvnXBEY=7P*8DH!(HBb;iHCWpSW51bWXQuZ)0AnH45?kfzf#DO0#cUIf#s zFk0)1NLKR0$H7R|0@+~To(7XaGc}c4;a;f<7~7*aR$tGBp3qPY1O2-JsWu%N(ov86 zLCr)$^0h(G-+-5Dn{^V2$P#q+R`;}4U3MoYT6Gcb%0{aKTU51K?sDN-Lkw#`h>C? zRzeVHO~2{MWpOyCB!>s!7-9S4i@K;u7VBnEb%R4opeJ@lD3>q+ZqR?aZsZR#5o_Fv zJYZ4)fP4(=IbORri>Y3Vi#)~G++JeKF<>7LRzuvWlu*C<=6V>(3rq_&VE+&3Sk>!( zfge3It-bz1rAraEEOM z8;c3bVDhjBoHO0W`l5@;h<3hM*PP%tPYbc``4hYTV3M#OV64I1Fv3J&L?eD=W`!TH z?Pck88TU;A@^p#;CbS^}?t{q|&KFQ$-orlaPs09?1B-(*>w$x46~EZ!&Lij`wgN$X z{b<8mPF>zDXR>g<7{d>HB2Vd4Gv+1jMU}qJPyUSp(`qJ`_5oXJv9A8uILT)9165@a z$2Yy4Udmn9q1uqBJI{K#$hKETm!dly&fJ?>AOk&&7c|!Ll6%O8u5)zZdDMbf%I97a zxJ?VXuKFqHKh8Cf{B+tp|J@$~y+k{+%j}hK=E<$SN3KbudQ-Dyrd=9cgtM2*EWB^Q z#l#r(x`{3(e_9MrFB5q|Q$G7qp`OnoG8{{&0Z8J(?QZYC*6uCb(&@Cf>e_RN(F`L~ zl64f*Ez!-X;*xF9s7{S)SI68sI-BwlUIM08XHHD}u&!0gZdILa*K^^*p;S*RC z;KO!Uhdt4U7B7jZY+HN4hCwWqiBFNG4YB02Il8{if+AYzj1wMqKb|Lzco-4f) zs52iG@$2?lfs07Vx7~Terl%B9kKU0W0#HMIW>VIR1(=cIyaXH~C~Mv6IWEqKXYa(t z8)*|EDN6Sc`;{JPfL<#0_PU&`_jPLP``wG(GnESS`*&;|1dcI(*%p&XQKkVjX*p#< zOhi2N^!jde?NkTIE_@8bgLJ~AV>V8s?X(So z5W$s}p+Xi=gwR9undX5I$h7GWe4$^rU4;ND_RcJxfkZ4xlUmFI<-h&RJ&|X|=A;}D7?7@7*gmsuB z%RZAUi>Vu3;!d0&d)yRY-p~)H**6BHhz=h2Q%nv_5xHs&5-v*rl z{VezaAF24&HGL3A^L)f+wcw4OSIG~c1NC9h0a6G zJCK8bp~JwZOYt%ALpw6+MKSr1J(8Vq@^M$g$;ZZBe7iaPHlLxT+sy+JB&@kHVB146 z8BkIJoE~mAjmLixXdmwP34Li^l#OC2to=9*pIJN~+hYVyjR>X(vv*eDT>HZG0xSk# zZzH0ybeFel_Vr28-1w5=CWq z1v*WtgC_Sp6NCp4+8O(j(S+Gp@(<2|wb;BdvbhU+0VWcFv@LBxl_=B9W5H)sMVNdf zww6OE^+kht&1!+Tz`Cvlk%QTzUsSk7gr^N}oAF7JW0HO+eM9+#p?lN ziJ&jUA&`rNdXl-s?$+FOWUKonT$*?%*y)$)5^fW78)a1l(O_3z_Uf~i2=0*2wj(}g zZ9@$L(H1aU;NGS=CWT`F-B`kX9_?=sNs7l5fdncbFsavz6$KC>CI06lSa}csF3W^YQAp zX933owdB@Ss3jcEBfe0p#9Tsg?GJE}a}88KqpGa;0E2=tw=Sp@fL{=$ule48Cxk7% zy}n>DT+~1nPk9K?WqOJgsPq$j3zteH0bf@I!Sj7ypTtR=H5gU-OAFdFVhC0^$!`L4>O7S!dym2Dh&4k#Q}gyUm$Sosti zpm^cDNhsozCfZ|lL8$5O=yEt$i+XyD>er`%$IQoxr8hog*L#U_#@BJ;uc-urWjHzy0}05=H{e)LdIu{hbf%=Jw=h;2JMH3 zruutDJL?*QyMEG(XQPU_lOEizIqnZmu{md5^}Ck24CmIFUnxnRofcAFD~5|fJYPK9 zK`)-_8l8+Q;m2;os8D! zGGgnM5n|MAT%pub*`W;5kBr*U?|ny=hlVYji6jlmy-{KA&23{FcZ}{b z$?{^y?K0)uJu+=jcTCq>owK@6bk6L^^wf5bj>)lvjLD*3qDg}{j&4YzW*i7;EM9v$ z-CB&bd5yeQ{yZCs{3p|aNa~k>?N_!=z1OR1tyf_Uw57Fus+`Vk?4JEHa%FDfeX%D;>=D` zLZxC2&30L9e@|+W^7+UeBcypVdrdkhJuIzxhSxgldc_UMKPT2St}vv`RU0PE&i$xX zEt}R3r(}EGWohi0qe_WHWr)nB6jP)s=Vpe_|Kt>{-KgZ%WpOfo&HZ!DM1NswLw}g`^%AKyWnD9z!OtJM{5gyPkAj?XDC#6=D6j1(Qh9#@c zge6`XbYjgV4?aCJ=Abn;pS$tI_pm7`gZO)6iS;y_qN)VB*v=}+?L|2OUt=6dZ0k_g z)jysxi6_8$38d!PdhhxR<4>oBGsf;@?Reo&`no0!9M4M4lM+de6XiG@r#L=#{q@3z z)AnA@3LM`{7~lBNMZWLp^qNWaN%Q2na<0%TH}yoS@AA`}t)qL!-0Hv@1~UR7VX4V3)SZS4_txd+fI6$KMso~7oRgs%t-Z1PsCns z9h2N&0Xo9uB;M72r~g-W#`YcI}Q%sX#Z}}oS2g`Ve8j8G)olXPw(sx!XdZf zo`Wu7Egn)cC!7hIKHtB}tqbq7s@Pfl`nPRjW^s2>af3_iih9?DQg+}#PKlOj+aCpv zzt7FynY{ZblTsC?wZwq@ZB2FR>Xf85hYz-<6BlO7hvH(kvBn3#3RQ!%I-T-w)Oe@o z{dqH6Zr!zjnmlu+JG>ekyP8DgaH>u`;oQy049nMdTn3&W?MCW|bD-58O9*4GC~|0T zVzh9sagKagXblcXFqxdmHE2;w$SeL6ml2uo?bkF?*#{1YZ5Ya!rLdkqU(w-kh1l0P z6Iq*dE0OmsiH<294@twWILqQAWCE_>q^;yLntIbXq%bKdx|0-&){Htx_;(eAwj9<}yZD`?e#xX0?-qzBE(cl0EfC#y?h83~y z7F!t9dB0_ZS$qu0jbEVxx}t}&b2m7)dVzBUZww209wM2)?v~@-LZJ6qXL;`2Q}i=n zG{E3%;wydPpRewD#|FN$FDb@rcR%Hn)Eks*#|yt35swOYwlv8uuG^RKbBy+%+;B#A zorv(;Kx6`De-_w0e!{s)Q29J)^8p!8{Z(4}%#|OLmBlj`4ap``^y+unWDAbwQm!x5>z=wqr7uZ!GPQHG>Sj^5+@`ts#H%)d!j9xrX?RQ`HHIx77rc z5R;aZz7|Ex-W82F1ii|j%lN%~W=rsiH!G`~v)i}S_i$LO%00@3>gtJ%msi=Ma|4IR z$1k1+CwLBg&u)2@6v7fNzCU&u1o}LZg5R0-_046E_<{dSQhuF78TFc#ASjw+&}RLK zD@s>~I_9#1dRy>1Lw`m2;tBgK18Y$k$>vQjs(S$_zTxvnFMqZE zf?LJx3%)YL(UzPSiLRzo?{%j<=yy^Aeh%0@OUqU>Yb}W_%$_zKaPWDRIV*0K%@~t0 zN&FLgN{Z@AV;Gxz&w9%*x$|H^(!okyDX<85SRlo!-c#}Q zo0;zSzYo?Q$dT$lxkr)onjqOYQei>QTMi34%b7Y}*=66+OmaEgokGs%D2Z>qNFN<{_9p7POQmqKCu*uV1BD^DfVH58j|?|EkJ(+|6=oc(4!X`W5xQQojb>IFa>v z=jYl=MR|MB&POWED*Yv=k`Qlb&@fpL-<9(ObRzdwZppjNUdU~71|*N`Q3FwtEo1e8 z7DWr=r5@io{Nb_i&u38s4E^%-J9&u(7ZqRM;@_4_7B5doT=#cT(8k76ap9_G5!DkX z3I0X4l+h?x7ukYb@aSCjnenM#19B>U3a-4rDDBT3cumze9GW-tA&SQdvm)nD5VKi} zH(jNC$pjphBh}u@iMnz;;6w&+&ceuk$vY-Q4M9B1Cy9Z){ny$FMTCq}OYEN~WDIf3 z>bTx1$1y=l>`DvOX^4Q)U9yWldQqo8B9Xga*290RP{{7(x$I(L1d5N>jAT`PzK7(J z(lc+o|KHSC!-bzJhF&hef3VtnsGxUmz@1gD89al zSzpU7$r}|{9xESF$shfaWnj7w;b^rq9{h7zPJqpF8T!_>n?5*w;-~LHip1Jh(NMKP z#0!asr>-m)zEuW+o+w8aNf*r?kUI>ex<(QFD4#rVNB@ElLd9w$#GdP@M}ZB^Va`^V z=C%h6hs2huT$m1>jj+_fz&3qrPs&N=xZsOGEbVIZ=)18XmgeWj?H5>RVQ?O?{^-R{ zB+Ee-%h~S-lR&h|i2}WHm`_XSTl{FN5ggjUuINqwLuq1c4~zOSVhIY?PBIum_jp$NuTP z4w5E3YXIi;W;)C5E6kqJLw0zU^psH88}-O0-mI%`xq$Uhu6S_Gin+13oE(Yf3YE|2 zJ2VEvIcKlhX!D_9zmDQfk7OlhdaXIW8hOPw@6I#3Ip+UzZc_BfyqET_quKfN+a^W_ z7ka|+{``rqkFGq%&&@K%g30ajCTV_vkl|bd4M4V5j%Ald!i2`6nMd^1HI!RwlR%M) z-X9BK0(o1K+?rw6efzfvAV z6Grw7+Pjn_yM&Z|3+6ms!T&$=ae393=lg9j5r82-SMgb>(_x<-45)u2vujI;d9&x& zx8ja)DXkiMH-i_;jg_EocOG-cZxVd1|e}uKt~Cf`(S2` zvosStAmaTk0>DU>ltahDm`CDYK8hNsi&(%1^iBBGR%IRm6f!rxRYw0wAVXY_=*0zn zlLRQ{OcKbl9|I(`K#Vn^m$C9P+%~KT7KZoJ7*?QY0;1a_zqy+tcOmg?h*P8u*olzN zq0Kvd0pXzm+Qhr1No7#A)oCuZQbH+wwXF+qG)yPZCIh((_!Dgoi&KK{Zdct6PB`#s zX;&%)`{feaO!#t-2#DhXMBe5Xcbn zkXZ^EIO2mQ@fz>r1cYMR5xLhV&~ar4JztQ>x`&Rd?K*&7ktyqNI1ai{!F5h`4&$I( z&z{~ldw9!=c1WX~nB^V3fMSGMBJ0fqXHY^Y)!X;n19Rk zobv-Wl#9uce0WYD%kP=_mny9SmEL@w>1^g!KFLKuZXi}B0gMw;iLyQBwZhCX>~X{4@;8b$zw?g5)-VvwYU__0O#%}JtQS=nB5y`>mUaBLu2a% zIV$gC?JwX`AAL2?P^2P8nx3`iZyXK(b!5z6zY--qeIR77*ziO8DO zs|49Sr~H$tbwC8GSjwOH6!L02VK^IrAya7sq}`2?rL`xDag4QQVZWlq+YzRDfV9?XxY?(jh<-+|K$ZoG7VNd6b-aM+njc{~kAKI5SLE(O*28ub_4yzxc++`@5V)7QHg~ zkpF!!t7r2*NGDILZT@r#@HhCWR{ONHo~@9-VbSGonsJPgSrM<%b7a}6JUx&_C`joF z&Rd0ST;#U3F|jcFm2kHWIk6wCgi9}7SLce-Pnb7yC9o8B|BI4Pj#CYILlMCKEx|Th zu}nggzH~B>!)x<+ZeIt~N>LF^uOP&K1l|^>7_?V`-i>$U94bGbj-3NzLLQ>f zhcX$e7r71%mqg)^&EqmXagCY6TH3NM*a#V9X{$ z%U0io-{J1Bj`b>mE|^b;j%Z9gx~di^`Pd_Cm^f^es5nmxVY}1t3}`)xB#;#%ADqQRDNCF0|rfp zQ0iHF{$IJ(=c^P}9`nED(@;b)!?DXv2738#6tHBnLh-x+1*fmUC?!X^-tyCWlpsAD zd2uY7~&|hlvvt8hI3g&4{ zs`<<#go;nh#;I9rc^oN;nEMD<6Ht+G-@W2^FoG4((`leTC(L|z6eNPv7ErUn;hnaC zvYC=rplqi6p*i!RwSZP7*jya};Isua>PfF@LRO%-}^*J|8A zk0F=?PLCi4gsw(xpND<5FjlM8!pI#|gN6fG0B}Utnl2M4FiBSM?rq|*?x!&gbi=!e zluj@%9-`ev^Q|PB7+R#3PgZ5^)qE)egX0I4TW8@&>MmFnKsGQSN{)*C7Dvzxd*X7e z0?z*Nw+^Pjl?CoTAW!_=?uu}&Iy5IW29wT$GimshH)hNg;Ftwic|#y5;E6dB&vESA zljm(P$JWO%NeO#hhcEjv>N<7hS*?406eTU#il}sng6&av@JAu383n<#d`Jp^GU_B`vG-1cekl`UEHv>_rd+FPi&yU6j^TdrRu{GB~b#of~3gHw!jg zMRu`e7dT=e1j?)64sMfKx|YIRI4BL69a^@0KU8ZZUs-IEkuB21q40nuv%$Oi)nCt! zz}$VjqH{YSU~@T4;)p5RHjKUQ{3yKGB2Y+;c%X2qF2N-lyOhc0mmzBhK!ic+Vq8Re|P0Y83(zc z)TxRpz$=GkcB~qW5?tst3t|L>?2u0Mrx=RKB2P5&8Cv{fMx;Mg1eF+j6~87=z@v&f zKZ=q6iDW#lJnC{eoMRBBjSP!O%K{$xhPh=)M~ec#y4=(T$^P>#~T~ zAZ@hR+pKMkC1J{U=H8{lH$bLjI4}1%IPU<)A^BXf`fjw6Rr4Np$-`b89IXJgBZ*l0 znFt9)oVc7F=OJ50*B)0(7vEutDf;yMSnm^P37b7p9xJ?RsP!{ya}X9f4W-2vujChc z2?AsBuq9Y*N>mVI0M0EE99ezjb8ZD?cFb2JuHRsp-Gq(nP4L-Bn9*AxwT$-+!Ioob z4=BN1d!@ymWP%E4IM0d`upKU5?)NBbg``qgKUXxszT>ETDen$~(U1>hVc!7U>w*L4 zN)Sdnl_=%=uW1O}@ByZ+Qw<8B(+?kx^FI-!j8e@cWRh`+fUAWB`gQg`v?~vhnj2iou{~Xtv}{9M=yam5%`GTc%7qF=St59dKzZ?MHHuR|!m6LCINwDeQGft;QIV4w!qm-> z$2~cCmw*Bkq@+PrV~n_cQioTj&EF#SKJQ}JU~9dj_v?FXlO1Pj^KT+CSv9fS_sLdM8Yo?Fq;wrieslo6Kz_;*L zwgZJ1NVT*Q1NVQ5j{%eiaSfujCi;KCwRe4fdd-4z7#OK&tDW3`V1DqcZ>N2U^(M02 zoNTp zkq53`B2<0!GV0EQOwS`6O;oXV_9k?_L3ACM)nmV1e)o}ym`-~VrDJo}UV-C0_od%D zmdIyk3Ja>u9cj2?!$uO{F%f7Vg5N6~o|hekl^fX8TiS6Xa|zaY#>gNVzQ>r!m^>F$ z(Sq8{V{32)B|{a_Pf2A+)eng_50!}teQDm_tu* zo>j*Einie)fe54~;d=;oTgx+%8D(7b(CD)WW9fbmYYtu2n*UAPvUW&l4%B6sHvtQbk7 z`{{$oWD!{9wR zzP=9Ah{Sjy1{Oy~9tYh_;NtQ-3C_qv!TK$V{PJd=Gskn%VuwUw)vsHs3s4eB^qg;H zo8y9%i~4lTDx_lwAW!qls{)rDmZ-IxRpXrK9pD@VD1(lSb8S~)a$`7;dhCNYTFVA% zmF~g-XJEg6w+hm2VU9#B1dSe0f_wUdbB|G7LIf=#V0;OrH35!MKnt%zt$%u5SP%SI zqyY;(5{Hl{r^jHqAhI&+)HAq?d^)1)Ie%fl64nHewIH8bCYe{L469uF016JP0dyyM zrzk)hl<$%nu4e?R!-z@i(O`j}5hl%t8WyZADjqOzVt_*w;6kP*%i$uSYF48+ZdeQI z4hcZ1X?ogF3w67h-L9x7yzVa-gUry%UY`za);4T1eD2|8z-W1dqe+jO)~cr;g#{jL zn^@d^^rmAtRx@o&yTNkkR#fMHg)`Mj@~cwhRblb*FrbZm!4V2FND~WPt5$G?0tymn z6VccJ^b|RQ16hcLn&?OK5giTO(z4@7E0Vvp0{VPpsFu|i7c|0)-WEw$oT5XoeaKGstERIy#4W*@z^J*y& zzoLeL+qA4N#TmF_inPfE*z1T?=4QY!;A=lnE$xsRx_n@*G;HuweQ+06Odqx%^zDIf zpuf0TuZ6B5>Vtm|7o1bt4UTikClR9fIDx>M=e%pcnjWwp$%8W=puVenur;oI6lxah z`uW(?TiOCnO8-Ahf9N*`8M5c>f$nj6hRsc{BvUIYRoY7MTj2$ca^E~4J_kXUN^Qe4xH_K^>c=(tj;yI&(Piw9uPxmZP6%YF4-2rBuFpR@0oBVpaJ6;$6E{{_qq$aM`G^+k6)-GSSDtsLMc6H!stAEJ3uZ42_trZvj$pwI-Ey}x}N9=%Tmc* zU14dcpDj_i?#jY#(4=KG-@z`~(~ifXITT{@TcLA;+QYe=Q2ov0!G2iBj>+g!&Etq& z2b8J}WRS2I41{d+VdUs*xZ9~-J3(dw#+u@vzv?AmJ2(}s!S3=l$vTD^3-)Ua7az_` zd$FT30>*!%K7$tuf~=J+@Osgl>}z$L zbi5gs|DqL_WN~j?-oVepxpY0Mx*FQbj-%GIt__r~qnazS2=_qNx5#g|*9s~R4bulA z8&3c*9dxOSQ!)b;k*#P&WS93?ECUA!#-w#)b=Ct#9vd(Zi`1cmy^TH@f$Pp9q3n$b zmHqk~mO8PQ#idTDLxj|CKI;Xk6GPB+>$&>5aHNh8h(}WutG3a~(7`1JoU^a1{(@$f zV1i2wbTIsEFjGgT<7JQ(YU>DFKjgEOZgc>6SYh@&xp1d&Y%_k?^l4>o4oo3XJn({$>K`b$_AM~Y1)xmh& z^jPaSR26>JxNAO5nPV7w<|=2?}+hG=6RvY;5ro+$eu|14y`_3KO1 zK>abQ??D$wOanwU$f3F}pFETVdKW|4G22ey;)udSf2s)(aGLZnY@Gd7g+T7EC!2Yz zpD5_9U|RhzD8}SRZy@R6ddt{2Q2Uofy~nEvMdwy}^~)am@Hjfj^A^CyH3I2e?E6DrdT; zOAtg%fEVp*vwaJ~j^H)LPy;oj&@Cjh)2!BSflG+cW{c(JI&7Dzbim9>i&f1z9_dcd zYo_q|Y~p_?IwvFd!5q_D5zH-N{~_Q!XrEOIqCX@<)Zx$~j3ZuUZAJA8zeu`G4mXE> z)wqE)wr#`8!Rd_UDTiTPK~(ey$05O%LCmpFyu0A~`QUmDh9&@wvEl1Q0q)6)#WJ+% z`TZb;4VAFHI7bonjifrJOgr2`5(Q%TURgIW`=zXW{6;Gpt z6J_tySVEhmtSiOy5d^Rx$#-4*bJRX|X^%K95|~bqh*3WO^8=hH31Tg-1s7|_`9_d> z7Gwv~9n&6S-2yo&;bBaqO;uR>keIwOm{K%qR8Q}Ld?Q-ZS)Pm$f!J0BxZSW?1xJ;; zo{akF^prfQyD+K%c`6Y3pzH!CS|>U+`Rq7O^n4f_g3dYLIV?=^Qo}+(R44GCsk)7d zLmq?mfU*WV;OTVhKY(gEO5OEx-D=pxk}#%#3)Yo~E}*?JfDN<4br9ubMkWA$AtIH~ zNN~a#n$|TKdCf1OM%@0PJK*dXXgpdjZ?({h6ErOeJJb33h})a}tIk_pi&GFD&dgm$ z91#!ER^%&YvOEnOMgZTyi2n;`fsz@hLkh;F4=SARAv=Gf8Jz8lg3wN(xQbofN%~qI zyoW&2(=|A2!Pt7`m4+aqq1aU`Hb**!ZT|KS^z4Z0Bzf7aarhfe@t;0|gWLl@=-saRlpY^K%np$mBK5{LfJ=$}4CnP|xjY!Q*X@Py* zsDK~0;I51`?Bh219-IvUnX36*ZJftTI692J4v@Hn3;8@S@osgADgxYiXc z$*ZW4!TKulQNbas%_H@nP#^jv=lJw%UL=Hca#Km=;`UNv;qLW zp(3hl!R00ms%=Lupx~>T`wa|4i!bcKn(^3EHQO^_nv~k?5)O1Ie_!$G{!O6qKC0>K zWJFNAl}>2K6iqow;Ens2@f; z(x%&@mq5J1aK>6w(Zd)cwdqhlg?7HiHD+zq(cL^Bx*E-7W0w%vnAKM7bT!hCf^vbS z*cSslUetm3JcyS~sc;4)6Oe6)H~|do&~yF)H)ysazgMSVb1_XyVXCAsKQv)08zdJ5 zErl;;+bK**7(+%_vz})-ihWs`^1C?kk-G+a(0dh66iUGa0A!PgGiKH9xGqKn*DMfZ zLNK2B9mkhq`c)LCL51vn7MzO!Y1Q%GFK}UB%iKlGN~HJEir2$rG^iw#r(zve0E<2j zPqI3TlTEcL#|p#oIREJ4;uq4lhZqlnJnZ{W$P0FzF;PtZfF-eQs`&wtU?Z_r)9$o8 zqX=BC3hF(0bi_;qHchnXzuPSE<$+yQ2AT*`(F-o)c27qa3EhFidEWT$2h8a=QyT#x zTA;V-T3gHI)BZU;F4nov#6DForA!#flhkE~Y4aOv2(p0I+4C}dQ2qW;(4$AtOw`xH zL|$~g3|b8owcv`;6eNF-Rr%tAKlQPzlN0bM^w3htyuXklA5!5#T+fG2cQIZ}L=$ur zZqh+}K7jT#ZX)Rsez4JxB7HuJKBN;?$; zGXVKljd>NrxM^H&bG$`{Ql)3dW42JcRpsl&n4)l7%ArF*Olwq6^ZgmMvCS4 z4jG+WbeA2O-7oeevd7p}eplH(PB63a^?#*g~m@=HQ($C>1u z2AieJJsXO8>Q*}4GHPJ(f6cA&`M7|()<@?~iHyn@ha4M)=W7?P4UVdFIu}$us7M}6 z-2+}&ck0~jyAvYda0S)9N@lKV{1<}56=Hs!MMoyP?4|74_&_ku4n1|j|8kPNF-|U3;CKZq@RV}?ee6Y}THDr=1iuVDUERL`>4vY@>$&b< z9xs#fKPX)=vSi~b34***e8t!0(XH0)UzXI2dQ>aT3wrbQq|H%fiO0gITvSFCc+W&e zR_Xn(#!Wa!;CzLGvMld)H}=@Q%g8ZT>3Y4%ddG{Kn8Ps?$*#+IAiqk zE!JMQoqs4T2+BF*;OX~i6;u8!Dkbt7(>riv>1+2dMz1Nd2a}z2k*}S-$xJqWm}b3g ztui7syD6E23NEP7+_a6Jo*CEzMEL!rn-^J#_ZUQI;DiNqS`^9m{Qrdy1=Hymu?U?O zIrhdiOnLH!)i+G+-elzX*EBwfcmu_oRDTEiBA+T^W%QX({0R$qyIlVMsrM(Bn59VP z+;C<`?zEZ`<}FacQr3!G`{pq^E&Xw)?RKO4fnXW><&fh5A{Sx})kq%wMcDTLr1ax2 zOiE-aO-Jk#L_7)~Dtu^!JJmRWsp-7#`koW#ichdsofiJfeK9()sD!t?6|#iCr?*ah z#I2Y99qPQv8YeSck_S^U#V>z`;W%GdwaoM)Z;yPTALoy4_ zreG4Q2$om?*MQGXyT5Cq1ncNc=q6dqSN<8YO7THomqq1Sx1BhD^&;3t$b41hCKpDa zx(6Jx@a|~)cSK10NdBs_WVp;Un-&eN#TI$n=aZ)GKej9g%lX&Avt_{(FivC>Gj%UY zG2zyi4wC+D+5R0_E6&9mA4IH<5=@sUSbWP+G7-eT;TK# zd>Yx5rku5MW9fB2=g3C75hj>yEgi;s_3HP0J$}TDuYm!@!95#=NTS}ddrnhwweMx>G%73cBq|q-vivD!W zX5R86K4VMTV(m(H-#jz0{@R{nJ2KuB)*X2g0ye;PzD7>E71ALB#pz?(r(5~UO`rrR z-Bzigr%HA%fkU(2sV*F`3jVKF`LQ?mP?`1L?+;W*egWfKRsCdtK?7p&qK+6{JB9uy z<4}OImSFQ|yrxn+J)dX787pMmA_0Xg&`CZK>xAXil%UzF8I?r!qiXxbz$TgOBPVpi zN+eXWGIG==LU}hL=KSUZbYNg8p`A|-qeJOeTa$eR-6@T%+o;a4Zf_GZSnpDW*f)Z3 z(kcZrIq6-2`zB49#F{V0K;IbswUTwa)o373 z?uf3gPyR<7>SGa~=jw7|?&$iDFx-P);~9VxY5xtMK-QU|C+qV4z^}FfZ`ZngmyVu- zGwO5rxDW>GTP4(4A30Bfw z8rZa2K879Ncg*v7Q&ZUZ@#JVA&ol}Ap%+$LcVNcBi<Rm)NAAIrV0^+EZAN+AH5cLv|8NWw^t>DLFFBfAbMseXO+%-b)YYFTc^VDrzq~Nzm zdABB_Oo4%sIh5p5y=7k5n|wcK37PCe?n|L{)%6SJ-^R19d~0B7aTp8~G3{^r1F>({ zifq?K!)g&NSNRP%DeWs##L4sc#39@-^OM2oQ-GBE7SldMqe2h6wIVYXx{wWi@;sLS zvAmj}=cCahciPHm*SAP#vdF_^g4(VReZU??iA@+>*M;i);pamKpjmV9^omj(4+R<; zambz@cEvCTLek9VmDMmD%3e9?_MeAfmvK+W%d<)I=sLH)t^&viNh)>7f1VGt{S97i zoJDM?ZY&2TXP3{!BLu+FQ2-K_%h|l4B38l1bs6eg zIpiErc)oJN;BNwSa-$9_Vql3@-+G)F)9tD%Su#-&%TUgY#0{LV$6e$Vj2eJ(`IT^6 zIeevFDVrThyVow%v^pDtNRtow&lE&!>@&&MI55G6h>5ZI+}J8piN8!2LoZjWKWY*; zsivf3m?a{I>JQ_-arK0^^V!IKUsrl-apy&v{VojpY8A9d@7Z*J^|MP>K#Y`(DYs725YKSzt|r#l4o`o}+cZ zH{!{DROf2<=S;3_hX6+3rLq(q#MT70zwDY>s;-o!$og zSEv$wnxfv6qn>+RqwyA&1L7uuJl`mT^T7}1@|{7!P|V-%#kqglpZb=e>k#OLp88MO2aQG+<>y;7)L+?ENk=9l zE*-T{mUmy2AZQwp5aJ0?02ng+s!OdPHWjQJoD&35NPzX}spCdAyT~o%uMhXo+3Z!q z+)dA;k1mD3hagt}$|VyZPT{K|N@LyjU)mMo@z43d7+LJ?DLGWMRQ<}Bg_vy(zr2zF zVJk(lwcJ${&@!o9hFxLT$Zq8s1O8rh$l0UtypdmBfelXnp!HwM_&K>D{Q;pht=_w69yoY&3Aa4%%oI$g#5#b6FV)=}?2;qlq| z==x*t?^%Iu3|%LSYsc0g7EqL|bN$cNHE*QHR<@U{p0r?STi&$oF|Gj0`#SI?oi6a- zhj_UvBGRql%1}(?QSaTD|8FKds#BH;Z6NK|U%0_oomz~W>V)1vD>S%b?@z@E+vnpB zOxVI&W)J2OLpCUcy_ZmkrChIDz53W4EuFnzSBcapp52(t$5o8@n7?(W#K`3eh+p?x z;h`EclG^SEXqb{#uqxqj5e!qZ+ns_SJW|v%(InoLP zkTuDU!!IVks$|q@bMOqhbk)5Ss-(J2L7P(n9>aGh4c%Oq@e>EURnAKl7`+m~rwRz~ zu}${)n=)=&c@3%IAVISqIITpkm06CD43cmvWXN-CLB1=D0Zkso4`$t}0r?_fcBJ>M z`wQ>`TaOzU^SM#5_8xi60hctniD~B-QKPtZoi2*A6UwsDOEK?>s%?Q&V9Jq3b^GDl zX%!pZgrVt%(8Dd&SF0NN(c0V^YXeDL4665f*H*d89b#(}d(QGK5p=+v1~TWDA+c&k zPHO0FRNIJXMK=KD4A)$g-Wp6_+WDGSV1i~^UbUHnFl}1gXs>$l^!?&W zbY$MfI0rwqW+!f#xq-N#fqr|{dV3UgFjsR_y-7u^I!Uc3@YIVMb^bb{1x36Ca^^d? zv*8zCT;nO01HAm9b-UVmGHRDVGHMK4-q#;rKW36#R=EG&1(^jNIZZ`9#<|8pnBE~P z(B2gSEEGw7^xMhdbhp`c=kJK)pYdArVx0aEVns}uMj76`90K3r0Ku=!KXMSf5TS=P zl!6=rgosTNSD^+VBPXlY>Ht{pe6WPlZJc`FD9~!jQRsIw{u9DnDy;+K!Z_s_mlUFe zg)e5N+m-Vmv`tmJ_di-7Dm7_WR9ORnwg1RdkO)Dr-iagXxbHJj#X}O7QX;4tnkzLo zxo@U@CK=5YByHPnQVP*0tv*S94j4(v_6_}Ke-3IoWzT>7UZEp%JeDI*5dd#MU&j4q zE6;`oj#Lwci{SkO7vVm(Vb8$xG6b{&LMz9v@sq`0*5Dk-wF}T;7xipS-SBTBlDx`z zZFAv!68LsOJQVfF1P9eH4y#{)Pz{KGt3iqeEOSBHhxt+rH)Vw_VwF>vL&R8ulb|ap z>w#sdz*(9rRW{jH_>Uq4*Mb#$O|RlsnyHXWYbHc$wd?-J`&=ZDUF{;li^dR-XoFE8 z85%}I&%Wxa!`nL1q20zOX$nn#1)(vlb!Xz6T2v9$#a_mzv6GFeKvopO%k7W6q;T6m z;@nO*xcy_D#Kh3;Z%Qz#MT39t9mVmlS1nQWiD06L!xIP|8bFal3*a{}pNTrU?3ez_ z)!Pww*1Fxsxcnk?@j$LvI((tcvY4Qe<(#x)3x~P!Xw~lO;($92bM!Ck9p?7TO@x{G znmOsW-)9Ak{d#tH%!A<138Me$GwhrTo6)^8#oR-2jh$b3T#(1aCZ_w!25e>eRm{CC5IE z|ECxu_uIaBe6v&b#-;L~h-QCYM=M8b*zT`b>h?N#XLW-0K+TlPQObCq19zyRYi^`E zx{Es!q{^L}l?s@dV;OGVs=vuub@0dS{DVHFQQy*HrhZj54-ndNy!JgbuzBQYJ}6;Z zWP7Qy$%tI>{nxLmhEUtyX|MaUjBM$yC7ebFtDm;CeHS-t`^Qn^zO8uO^yu`H@CW3f z|Mh(|o%+x8f%47um-B3WE2V5Id)GfLYuyri!717QO!BhUUcaFs_dZ$5>3tI~U9K%l2I+M6RZ#ek{#U+2{<;4#zOEK^8H@YIPy-;tcBt1$mbPZv;98Yt%Nyt zbQgvDSZZ#hqrRB)iv`5~xsMZEI{K$5P`2uX3MKmbsgml>M8@E_Z^sS)(~XDcer(Ce zd&W>Psec&rXPa!m_~eo5+mtJQX;aMBoyS|9jNQHcj|F$%S9R;Z#GvR5SQdYZA^v`M z=vhXs-M7iAn*kwftt;|~GVDyd%Uro;cj94r&yMkem2~fm%LZc7ghy>>L;$9{BntPM>b>8|>&DP;nvbVAZA4XqWoN>%Z_JHP_Uq#h6p(n)hT{}kdN`KUHdw1mSWY&)CQ{Yib(esk)AJEqy$}~HuxN4Ir__4QO+VS?s`kj6@3S2uY%l~SWUkd;2r4nE{(c(kW-=jFiW^{qag(JCo@@2nQM5th4l$Z0qcYG(H* zAJ8n&D83;7y7ZIGJN>)i?C_Yk%Kf?Q_}{rQ#nt{DDKDRvDc{Lrhd;W%_*_Uu?9yzH zJ-=+C&7N%$S9UY&*^uSHT%J8j+O`JD) z5J}DF*Z!jZ=mG{s+5ex_avgGN(uDV;KeWTLMdMxlJI)+%8axnpI`Lw1*sZ;P|vtN&lOgUe!FsgggDRF-5 zz{7cR?A^AnD!7oXH!#4qB-Ia3JuJ`X339R5;(^6k29x0vHliUXTI%fy;09R@XF|=7 zZkIu)F`H;xMcPx&gyvlz!E@3gQ~Qfr;$7`c@5flSC0(jCxFgoOIjSU^+STpT6D}EM zV|2)GrE063nhc?Apf~wRTSb4C%ATVe&R_hvg+D~|N9BL^za9Q0H#H;SaQ)n@ghu+! z{Esn*d*_J%*%&pPnDHwfo_tXUgBsmu(+t7gjyWS~Ydr zW$E2q3GJ|@T2l4XQzr~ODmZWXv-XZ!?dIlc@PlQ~iM=`I|M>0VvHQ_=73vb!{b>dj z+rn4@*+arD11vu1ssWCe86>zTibJdS3U+l3wLbLLI2YK@*Se<@X;(Os>#?sTP| zbYj^&$G_^6OthB`?_(XONYq5v?lO!Li``_A%c%D<4>-Rs`-047uv#6}qMHktZ3a6Z z>(rNm<#D1$ol)1kzbMNF{_Z`Knw%L{`=Tyuq_SpxQBm?HN~-2_(%I|_io#(vagJ)N z3ZdY)?3$>$tUv8~3d-qnDjx$rf7_CgSXE3~<2vtU@2A4bqMeL)LBv(p26BiZ_Ll>DWko9e7a3CQmh<_ z+Ds03^3>H@jQl~L@%j9;;kG1Elhgct4PT^1gT6YxSq`(doapYcTXSnYue4+wI?I^M zls2hq{B`;6IIGIVF9U`g&O?>2Ioj)&(mlQ&mt<$08#8&tVM@aY-X>slV=#+UN}X@G zcVBAIG5DiAM_vQ(v_X{isSBBcn86$2iBDXf6rz>9hCUU(~Hwj10RXb(>asHtyL@p}(R!r(2k(ITUJ&ITX+r%`?uN z?_yY`YWuu75Y4`i@6b;kZ$7b4_(i#VkJzYnAT5BZEX(#IS7RSIBM!{~zD6v4*72c45#q+Uv*%@0kNd)#eYPu`xq%Or2 zW7PE;n*pugsMlSN!=y{z8dR^$c}# zj)4GrQD8HgDRuv|(5wPo)93w}%F#7Q-hFSCYQjq6hk?8B0`~1?rM9e+CEHm0`p?I$m2=|W^j2g} zCN>*cJryj|8Ru&b%A*|_bI;mP+KBWGxZP851N08Qy;?in})iC0wOKX5*jE)7WMI;t_1|r7+qJV^umv4TIHiNpbV0zcm~qH zU}LYv|KvRsF|IynaH`TaKB~RPnIY&MZG+}{4m#(lGaK~%T~9>zyj4O78G<|Og$mL+ zeoT*3%XA3dwYB)lLtg(m(7-k)!XCfnw#l5pX+W`tUO7V1sxZ2d$Tk97vNjQFCt*oh zvpV{YE@u#yI)1#lTZ#IpQjtA_AFwLsQRg@K5xK=1F{NkybZtoTt3Tc?XS5WKREQ%Q zJ0I)C`K>-F8seYudR2t(0X&4TawkE5VK>j>tH2o?v*M)b+Z&&JEPi6!CSOY9+1fovKO@`=YM7PiKcgFc=GPt59+c4+R^^A@P?<6-B9?TwPrUgN;K>hb$Fa@ zl;$WR_v5-eYgXE&KX_8Xql&fMvi^`ukK}Fjz}dTxoOLYYh$eB1f5WrJxvPJ_=!Y)1 z1g?jvz591L1Df7Kb#9subUf(Cdl$BZ>o`X7gX?1j=i4m+A)9cfcW#w~Z}@fsB){tu z(}KWq%{*`^oGXp1@{}sOJc@5Em5~y(k5{MQAzW9yut!KY4(yOkUNu_|8&0jClvXci zyfdsXJJ_kq8Q3P>s-u1Bc@L%3tGZ#Z_bNVUx!LgmKgbqX!^hC+le_soMQsl-I0uNV zn&{j#=p25Nsw#V7?Pe$i57$lz;WQNz>?r!#9sy=828e&8-!WmR`b8@Ix> z=(MJO=ir{!Gzx{?V*-pE4|8waHTdZ)QInMXirFi>?v<94;5$<6P64I#dG(c83?A0+ z8)du5Wr+Pvp2G`Y!1eR1r_ai9?8vWc!JK9@JQPWA$!eiE;DsPp?QJ<(N z6{ugZ^jU3xptsbrZojy7oBE!Rrk`GXw{frTAa2Xqc=fUbA~s|!9rp=wj&h8~>Dt{J zyGuT)Ee4oC1wQI^z6l=(-Fl~wBTMJBk>iIa@Tau~SC)YqOY`E7<=``npJjm8T6soV z9Ur5K_2&F$pA{3b>D3bEOc#_#T%X7-W6o^5!k@I8wRfx!0HF3b$UprxUU{OvpYD;LaOf93Om6>@^N?P!EFo<=2~;}o) zqw(`x54ZY^)a_aQ>aTGAdoq#nMpIPNe8pQa*jF<+_Aa9f+qPYlA?jkNfo=A-WtZ_p ziVDls@ved5r#exYr5w|BxAm=y=kW4wiL^C?A3D`SBm>oi+4te@sq+x!pl<$^1vGS0 zOjrgHYiJVvJU;4xSXjd`k$J>2+@rCsrl&dPghkG=6UHJiNPJC*JY1BZ}E=Iy)O68VvC+mvd&C6$x;kDFW5Tyq}>#EMQ{ zw^}H$jXNP+64<;txY<1N0d!xBM=@^>Im{y$dcioZOippz<)+2Jrw@9SyRAzH3W)t7 zaMj@faLntyuE7wOPX%w?l@!R;dWGf<>C10DnXAy=Zfep%ZliHYO+Ym?&3pP z5zHO!H}Q&^kDV2`M*5S^>yIT-xNs}8IJ6Hqqv%m}O*`*3<*-)&IvqC> z!PoIu*A?3C!kF1%;Zxs`lzMeaPDjP6xX?YVyd&Po zB=(^+ALFW5I7Vc z*^d#ci5t)z1FLUyY{OWtrmrs!^h&5-R%;6=eI~1a{0DXbdwWt8DrY)DVIjlu3bs=~vcqY_`G=Urz2AF=Pb4 zS(!g9_~ds(J&jOT_geTHisff(Sy`-6hl4(TMl?;YYlXn^d*~&#XO`xyzAubwiD%sx z=60#9d#@mqvhL2!kEINkh3tcJx+E0CCl_g04@i4wnc=T5^4~J$MkuaS1V{I{d=QgN zJG(PPDl{VqN>OhLPdz7(x%btUM3* zijhV|2F&$i4N*>_C`+%y@*1HrVUIzDicm&%bbP+QfM!Wx8F+o=+IzE$dz(by^ph#1 z<&n_3o!RAwJLvH%r%D*6 z;jygHQ6BlUr4E+Po?4-Pr*Y5su@b2R9oi*3V3G7|*%g8<^|JYLHk-&HFXpi9VN|nb z8*rk^yvjvvhAW|4#&`%6z1g|S zrkHGT_7zucJ%M-BDObuN zQRenUy17b4u65bQTakWPs;c#VQdt>+bJe!Wy6i8T*#=*Do($t&S1|xD^V@58Z&qwP zUa~J{6)DYaAHUU$_d!YH(jugD$By@TS1&Uc4d{ok4(1Qn2NX+JltL5lKMp9foSwCqHiw{I!fnJ7to5yQfC8jrrvH%d>w4_nbWRFDOFB_% z>dg$6yPQ$Z=krUjnRpscW5}F8m(wPhhgUF;}Ii<`hqHMM#X1Q@#eb*tXC%uNRf4e78j_4c+OI!OOi` zE01KqRA6bWJKuonw)1Km&Mbo7l_+jJp~sJu1+<=M7uQ$T{nnW9?Khiatw5dl@w7nZ$YX~D7}R{_s`6o1|>$V|a=yK@?OpIV+HStZDOxuor|UBR=l z|6XsFSG?JQ?o-`^?V-c8cB}m0hk2^~Z(XrL5fe29 zYuYR2{Z5TN;z2pI$26_qL`W5n?#KEUORDBnSzLO8almv5=jOBFnX=0I&`37iyDdb* z+T$9YyD{9_EO*!-7Xwo)zG}jX**|BtO_V#qtK0ovMbM6u+PP_Usm)=ca$+xs3x$ zKQ5X^m}A?Q;_u6W>{PIc^X}~FRY!mU8gE~P7tPi zDb!aysyV`BQrA_8%$iRBh{f>zDIy$#{NFMPhRInGK*_{5g?zZrRPXe?SWUiM8a?bW zz|K1Rn68gn;%;QAyoL%x2+z}p9<$$U^5RymS+pA)k7_1H`A>#VcTnjsCc5^uNa|>? zfB5>)n7?>N8AU^cP5kFNWB zfw0lL@;Vmi%=?T2x5aPG%n(WWGaE$FOpl8a&&t-AYWhXolOPaXTq$h2PrNuVe77N= zC?mS<8i#T2oIRS`ipH0Tp>!!LJ#zGE;pB$G9 z&NgLQ9nG=o;l5L@!Y`q3sEElj3%I4YsdVmR$@>bjGwT)-VjOm%pT6q8ZzDC2w4ip9 z-63R18e)?pSM3`}S6q56(ATlasM%}Jc!cgzf9f6vhy8Ee^D4_&)k4V1cB%HNkM%5; zvwwK$yK&fyZaQ~Tgth1`tG)pXJ{Y=%@*CU=<4t07H^Hdwao+Hes(C#sbIvR3%WX&R z=8JVk!sKwq@+j4|$-Bh zNu_9H)|O@P3t;ZU-&wQ?t?@^;R;T|9~FpI54HChGgQ06^xc%7!AE(J*-duU(uJ{)9sGkL8s z2sSmt7s~!3U}vSDXSpqC0f}gLnv(~E8b&LSDWhyeL;_K zFdo$Zb}&JuYeC{nWOFDV@V84VEH(_1nOw$8BiRJcIF#hwi{O_!&U#6aLBn&#Szo`* z_NofFzHBu%_n-!pDTW5Mxt#X1pHD@EQu5Qs!iDva20_&l&=aw<_NjtIY^dEDl81H| zjpkLQ+5KNJ2YrPHalE*4Ki-L&bD;sD#U3U&0s4YQ`!}Y#PofShiZ_m)O6-o9Mt-llce@{*3j% zcpMzX`xhES%UOL8IXN(WPWxrox99E7=vzbOyVmAn=!`4n{?IyzTT@8Mq?`_gtxsd| z?QAW9R99{-%@}9DvVbS7LPdj7i%dm2_S|`V^inINu(&JY>8-Ci6Sl5L`VfUEeoG*& zaYG%9gFWB%=AL@{MGz*MdufW}dYzRr?K29|vwG8^RO!h|@ftNF%8PTGFv7dmfhnX0 zbZf+ggx4*lYw^E|921`pzxg^O$m9}b71fZ5KHZ(^&V0OV+MD8$_vh>VGTPDu%f)Mj zZYb~^&$ypqAQ628)LtDu8a-QSsF1GOi;HQi&u^oZZ8XT^V# z5&i*2(RN1;btfTeTxxVc!{KZ;eaYK4doRX_9vk_>IroP38wd6Snyn7yn3IVjlM15W z%E+@N^J;5hLUB(xToO5RFFY%kgul}}bGB#meFMRTeN6coo-}jjLUrcnZ}i2VJhreC ztT^5yzw`ms^PaNCVkxdCAs-IE!sOjw`snVQh+{$Js!dV6FnlHvm$ma_K_BZ=fL0RT80gwo$sdhw|Za*zg6N?d> zKJ0BG_dy*e&Ix-O8Lduw8v2ltQ*bMk$qu=H(LJ%ROv5FtvF|W?nps783!Tobe_hA# zVtc~bZ-NQt6dHLI%P7vI7`sX$MxVFG;R$#KZZfcv^r;9YN<}gUI&#hAnz!cq@5eMd z1)dCA?MfOOu{}H$Ym8BKRv-Z52;y5rL+x32D_>mwAM5#zWRcHQNR!Zqd=29jjhHLj~~ z?$>^`^4bw@Mt|FH+}xtiIo-Oa9eacZdH>WP>Mv|6@#NjvYS78!hc`uuNl5x{ussD5 z>60@s*E`eXiw_A&i<~7H2_x8UQ>hcl8Vo80i&T8Ua5WARp0;84=~JG|EE42HO5b z1c&LdTcrUqHAyQjR*s1lNw;RV>5jq4A((1ERxSF<&f#N`ZaOm(Paf}I6;aj@*=zXZ z_-+{5C~ZSMbt0(3M&Lt?jT~PczR2T>vGXq9SU*pJ)w2DbeIs@#H3XN}yy%~rzW(&& zz1PRcZyUaUotcy#xiBl>yYuB=8ajhl!K-A)SG5)mT^s#uM&7-me$5;ob8;|goBT93gzo^WQlqd3x zDmRThCs7N2XQT}Y^NV*8CytevoMJzM?GaTe6aoL=@lhh=8U+Cpnb>{B1ePrp0-<(e z7zbk0+TgPVy85F!=s_8!cXz+H|BSb95$h1)((B_U279vzD_)9;;|`vx$>XNsXt$CN zW)b$wrU<*Mq^~LIjmcfYlW1R_;inp2NSwf=F1Brp*{tiXSLqL-p8I<>HqoDK{i-s! zjkuOrTH1J!TtArA>wb0qmY$i0Tr+WTT$!;5@t_K-KT}Yck%WKa&$YsjC@A5uzpy#4 za+&1^2-!R@Aq@oN&e}Q-k`68Qcz&%vL;7Pm=}g}>GI~uZ&y8)tHobhEpMJK)u0f$ zaBlD1%(Ki$b$$F(0Y0z$sK!)>IMm-}ZaH2mAtJ^=HD*-EB_4AWSG&@3_JwN3&S5l2 z4z1kqFX;L3%@+iSk2+Tq$X_}z^t5Of(whJJRRZDoh;O#TGr;qC>m@u<6~0WNw|cvG z%ciDdF0=EYdU6t>m8TS^uN){vv}ID%v&U4_2soBn)@s`cl+`k5wUWs8uA_0C!Hrooq#`V7{F30nC@ zyU5c8ZijffwD%247nY8?^#* zX3SH`oPkD^)%P?N3;wN#WeuNBtTWG7GtEm}UoVGLgY5j(qw)S z@xUwNHL;JK7p!2~&QuEu4J;3+Ggy*ukMmlM-wKs}RvY?)S5s4HNN=~g;g03=HqJ{c ziKv2D!HM}I4;GK9U7{Hp@gue~@L>1-*x;8^5(ee_-}_2XspQFVC|R?P&js~rmxT-y z>HxXa!!_yc4dza23G@}-m@p2oLpZC3$}qocWG%V#qe&}61nU(E@Y7t@%?^@fH~*<~ zn?s)>3&eP$Oi}Kn@GGw_(tnggJhQn%S^9GDJ$&bsr9FYFFGHRds3ZAKZxIMnfBHPx zyBNvT_}AJ#LkA^PncJkagD2TlJ|E!&M^t8f ze-nBBIWM_$+?{PhNIAS_xa!myR;#z{LxS4$#4#LJ@b_XTUXXD<(y{egi-eGBODP4# z%_r%7s{DHV$$Bb!b?J2Yi}|dvM{{`i*Dn|!A=*(T8vHLFr4*DJEdlH8mXYv6s%PlR z7>EJ{^7lQ&nux=qOy$NBR>HL+n~XMDP}Ys5lVZM#5oRk^9j!Te2T5f3j)zJ&&%9>M zlWo!NvdZI;0r$P9;9e8ZLAc{hUZ zG=x&6Gr~4A)GM6wgqVqx8V_koLzByO-kK+e!dUQ_)ATKBC%!A|U^J!%2joCW zdADuVRBOZXPigutwQsZ+&aQP@)nN%A{u(8)*svaTAS;-sG1;wLR4K3{S&TYTE3 z2O9YOnnMEKhH?4a7w4RS)(X^mFJ&$>Fl=YFG!_umf&1>AzPi!<(1>aL18u(^RlOe7 zgnF(6)2sVVD#`CNE`1&kI28I|$90^`RkFiVcOpI~XmmS_+H5o0@?*A3uKcxE$+>hE zH|%b+>1vvk@H4a%HEv{oK8r5HKj%{dZ?pSy`J<|2A+;ky`mVNxbxX!LbaOD+GF9pJm%)F5a?Dd(p!CJfIjZV?0+WoflK%tixAuK&E2+ z#+khxlh~bcaw*S5uA>8${h}gL!_@vcWqI<$_BzEIij`{cIVKbpafZI8+B>szG5W*< z6uK(PD$iVK4|Z1;m#?`W;Bnfy+8tq*BkDKgU$`F}j!*&WNeDhgYU(4BDalA&Jt^cD z(M(9$j91XY+2X~?LK+fD$1O%`0I}4!NWNpNf5K1$1O=7C-gX^}env@fgfvH#b#UN7 z?SCIe1J53Wz_Uj?$6JwKHHhup7h7C`FkXnzZhYEot&^Hs1egV@>DLRgI+;#2Jb`D z2bq^TGTSd>qGiRyqUPN4uCG0+4igZPf;M{2Bm6BB3E8F@QdnDR&++Hh zt@loLnjT!FZW=Y93iFgo%cD4D##ilE{o*#?huf=^DDrAQgScm$WCo^eX)Zzj)g3Pi zQuONT88p{dPv4w%_5ITjJV(@=e^UnFBBJN}b7I*%$LOaB&__@{s)U07P5um)Bgd9d zo3V*O)%A?iwy;?ryTb*~I4ep6L7$smCEf{w+~x#vRE$itMa#t*kwFp~LN{H|s;3)A zeY5JCnFe2Se)E>O@`y<(Ao@ZmmyuPm=K$hVetv{XN>FY<5+rz|(1MCVH&Kh(Ax!u| z?G^Cgcqx5DN>ABvVnC%wG9Hxph}9fXFTnxj{e{D#tbmL=w@=~*^0XRQ>H})?y{c0g zedh>l?a|@aG;caK`}*8`GjG3L7|~CGoVaJ?Q%l^KNwI)_B%NNa%JgX|29{IIYjV5+ zol-NAJYn1DE&M(ujkJEdC=d7>67<0g>QpQV;?=MZwKEqY+ZJ<;wcI1ks)L;##$N5= zs#hmOUmW6Fc)Xe5%$0w_uOcS$F$uk@KefB)@=K{FZX4%ss)ITg=wxgH{gpyJ9liRc z$x!z>9hDi^;FqD4GyNAO21UJC!=h0iO6}K1wmR}&9()c&R`Fk%)zZ{3=n}fP5MIX# zn{`oNvtRA0e?ZE!l(;wjiHw5B=t)=|(d&NHqr@0xRi|RHr>9z>^-QbeFW%D<%kBuA zs|seNqz`WxAwQMiq05jI7>gLjpGp+Aq#`08D|mmq#EVLn#yo5jFGGIDYxXc_`AubS zFC+beXWbFTIiga7{Y_ryQkKCGh@LEKzqZ)kUIxa4 zIMvE0Lo-d^kHDecBZR*0S9>khCq!<7WDJye6C9Ua))+q9MiaL@?a3uG&N{sp$T2wc z;R}@3q`23p`^>yfj$n*vW0rO;DGT3Ptu|Dc3hUa?FxM69rNm0D-+=iI=0;GG~g_{ zwRHpmjj~zRiimXezSZeGZS+`RMQd9RfS;?vkjx!?G1V9xaP z_8x)m9WB2jba+Hb3H_UcNQDp?axvgRdo#9%CjBA2dRn0BRjKJx)oU>#2d}*ekd1&q zhwUY9d&8N)psUa6#;XfJ24kIkhmCKAYN4V-iCpSYj`e*l6m~T*D1MP-W1m1`_33); zlN5$gjFr_OW}V<|)m4qBYwg9?hJs5AjdcYRtNrIse#pgB^V~13_mZpGzWs3`>I$m? zrSFQ@S7tQgTEdw(H|H_09v2KfziLCZw$~}PxIp-ZMPTHJWgk@${zb6@=LHU5l{((s z?BInVZb5jD=bvhor$UpJjLvJHq`VaWo=}BY&nwyP%oV%0*feOTd^-3D?ne}b$iFzx zhri)L1N;%kC{m3jNmALS{z=M4riLWOlQy&(&p6c8kI}LjPbo1)KceF{P_cW7Cn8ao zdgsC`;qP^7LArr4MiX1p_nct*35V;fxcDj*xx%Hr`HLz2a;hpxQ z!f>XT74*||rb!hcml*EY(!t)AyFAm8gVprwc~WU3WI?Exd|l7Z z=*LJwSy^25s<_czJyi!4Ju5qGmcZEAi<#iX}bzt6vZ-P#GH1>%B2U{DYj4{$yPMFI!TP#BPJ zb-oLzpl6RU!y-YrArNe82LAhJq(cJ63a5mzHn0Ohu}+C50ZUi`p8}X!nSiiI1m9Qs z6GQ?QH#0Ui!WdZ@7})_dv9F2kZ1fC_KybiQtQ;)$jWBj*CRQLG1PE+ngfX)=1n~fe z3ob?&YY^Dl3RsE#Jz!*SiZKGl#?}rP60otEBQUlDgaq3eIT~4kz(!^!rhsOx%zz09 z;4#g})9IOlhJ_gnpBM=HWiqr$4fJa~h60jkF3W7oat(gEFfM^DE z0DB7%6bk4cpbYS~0WN@zjsds|mj1Vh1SeuZ$*YXJ7>Q6$%Ed3CjU{!3Bc@3Ki3{k^Zh42nksI z=MV&zvDdROGZ3{hu`mJz2dmf{S*l_O3VKes6#)z4f&IFipJ`JIgn&T)Uo?{cTRL!{ z=Hvm~k_UJq=7aNr5O4$uiWdSx@7XSaRk^H<5 z2XL_sOXFwb1>V_1Ay@_Q@c<1VgyI7sfoCHG;MTkVb0oF_hkq~>FA2~92Sk8)c>yB8 zK0^X-jpPFa0K5&?WA6i-00D)9kidK_O%xvr=)c3TJ#H~@Bnh_13V~e|wjltA!_MUe z7XFX)T zu#ig70iQl$ z#mD-=e?-Lsan1x#!p{1K3RWlxgami*2LTiU1^U^rj_}k~g4&R2f;1lAvZZCJT**8mNyZ~Sc7l_Ma$fDHjzu|9A_L-7GN!TJS|e|~L0ed1@2 zRSIBt5?qfR|I%=_{(c{e^H0P21=gzA{@<^~el1Nzfqa6Cg+Po2l!!}E1|TT*As$Fo zh9KOhFu=$N1Xvaa`yQWwmlwbl$&bK|d({nK;Q~GEN1nsReh^@O+$<9i43~Vc5gYdc z48XPk!EhW&fVd6BLL440Bj8?_00_UN8^D0L`_|Zu^nC=R4j>8Q#x@{e(ZGo0XG#Lr zjJtsWeCYcKh|WJ2`aJ~!7Q4vm@|M4Lkqer1LXKW3#X%;OXC|{d@n{oFoeUHCa2^ zOR3lc-}C_)LlhtiHUNx=B@7mY{U6bQEc*lP7ZI>5v7ZEFp>z=x068tF1n%-C31 z+gq6FgB;=9NNy-6$kg86#*QBhw*2Q7w>8Fug9Ho|HHHobzz2@M&ayEy2I=b=m;+pX zPyjG-ijPra0S#( zzr)~IFU9`;kq-gm!*1yRz#tG9P(l3{hJYb~i1=R^63PpNlZp`%@Ma{Ez*C zKq3FI5fX5N-|c~fz<_e(zdVo-Y*q9-jF