pax_global_header00006660000000000000000000000064147752577230014535gustar00rootroot0000000000000052 comment=4fe9b255547e4dc47f8d7b4c9a3438f12738cd3d open2c-bioframe-4fe9b25/000077500000000000000000000000001477525772300151275ustar00rootroot00000000000000open2c-bioframe-4fe9b25/.github/000077500000000000000000000000001477525772300164675ustar00rootroot00000000000000open2c-bioframe-4fe9b25/.github/dependabot.yml000066400000000000000000000004261477525772300213210ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" groups: actions: patterns: - "*" - package-ecosystem: "pip" directory: "/" schedule: interval: "weekly" open2c-bioframe-4fe9b25/.github/workflows/000077500000000000000000000000001477525772300205245ustar00rootroot00000000000000open2c-bioframe-4fe9b25/.github/workflows/ci.yml000066400000000000000000000011761477525772300216470ustar00rootroot00000000000000name: CI on: push: branches: [ main ] pull_request: branches: [ main ] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: Test: runs-on: ubuntu-latest strategy: matrix: python-version: [ "3.9", "3.10", "3.11", "3.12" ] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - run: | python -m pip install --upgrade pip hatch pip install -e .[dev] hatch run test open2c-bioframe-4fe9b25/.github/workflows/publish.yml000066400000000000000000000013401477525772300227130ustar00rootroot00000000000000name: Publish Python Package to PyPI on: release: types: [published] workflow_dispatch: jobs: Publish: # prevents this action from running on forks if: github.repository == 'open2c/bioframe' runs-on: ubuntu-latest permissions: id-token: write steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.x" - name: Install dependencies run: | python -m pip install --upgrade pip pip install build - name: Build run: python -m build - name: Publish distribution 📦 to PyPI uses: pypa/gh-action-pypi-publish@release/v1 open2c-bioframe-4fe9b25/.gitignore000066400000000000000000000005101477525772300171130ustar00rootroot00000000000000*.swp *.swo *~ *.py[cod] __pycache__ .cache .pytest_cache .ipynb_checkpoints/ .venv/* # setup and build docs/_* *.egg-info/ dist/ build/ MANIFEST # OS-generated files .DS_Store .Spotlight-V100 .Trashes ehthumbs.db Thumbs.db _scratch/ tmp/ docs/notebooks/.ipynb_checkpoints .vscode .spyproject docs/notebooks/cgranges-test/* open2c-bioframe-4fe9b25/.pre-commit-config.yaml000066400000000000000000000006661477525772300214200ustar00rootroot00000000000000repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: check-ast - id: end-of-file-fixer - id: mixed-line-ending - id: trailing-whitespace - id: check-case-conflict - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.7.0 hooks: - id: ruff types_or: [python, pyi, jupyter] args: [--fix, --show-fixes, --exit-non-zero-on-fix] open2c-bioframe-4fe9b25/.readthedocs.yaml000066400000000000000000000066311477525772300203640ustar00rootroot00000000000000# .readthedocs.yml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 # Build documentation in the docs/ directory with Sphinx sphinx: configuration: docs/conf.py # Build documentation with MkDocs #mkdocs: # configuration: mkdocs.yml # Optionally build your docs in additional formats such as PDF and ePub formats: all # Optionally set the version of Python and requirements required to build your docs python: version: 3.7 install: - requirements: docs/requirements.txt # .readthedocs.yml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 build: os: ubuntu-22.04 tools: python: "3.10" # Build documentation in the docs/ directory with Sphinx sphinx: configuration: docs/conf.py # Build documentation with MkDocs #mkdocs: # configuration: mkdocs.yml # Optionally build your docs in additional formats such as PDF and ePub formats: all # Optionally set the version of Python and requirements required to build your docs # setup_py_install: true python: install: - method: pip path: . extra_requirements: - dev - docs open2c-bioframe-4fe9b25/CHANGES.md000066400000000000000000000242031477525772300165220ustar00rootroot00000000000000# Release notes ## [Upcoming release](https://github.com/open2c/bioframe/compare/v0.8.0...HEAD) ## v0.8.0 Date: 2025-04-08 API changes: * bigtools engine for bigwig and bigbed. * run length functions `mark_runs` and `compress_runs`. Maintenance: * Numpy 2.x support. ## v0.7.2 Date: 2024-06-19 API changes: * `read_alignment` function introduced in v0.7.0 has been pluralized to `read_alignments` Maintenance: * Skip `read_alignments` tests on big-endian architectures by @nvictus in https://github.com/open2c/bioframe/pull/216 **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.7.1...v0.7.2 ## v0.7.1 Date: 2024-06-17 Maintenance: * Refactor join arrayops and intidx internals by @nvictus in https://github.com/open2c/bioframe/pull/204 * NumPy 2.0 was released. Pin `numpy < 2` until we migrate. **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.7.0...v0.7.1 ## v0.7.0 Date: 2024-05-20 API changes: * Add `to_bed` function to validate and write standard BED files @gamazeps in https://github.com/open2c/bioframe/pull/203 * `read_bam` deprecated in favor of `read_alignments` @gamazeps in https://github.com/open2c/bioframe/pull/206 Documentation: * Add "bioframe for bedtools users" guide to docs by @gamazeps in https://github.com/open2c/bioframe/pull/198 Bug fixes: * Fix contig name and JSON issues in read_bam implementation by @gamazeps in https://github.com/open2c/bioframe/pull/206 New Contributors: * @gamazeps made their first contribution in https://github.com/open2c/bioframe/pull/203 **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.6.4...v0.7.0 ## v0.6.4 Date: 2024-04-06 Maintenance: * Migrate from setuptools `pkg_resources` to `importlib.resources` by @nvictus in https://github.com/open2c/bioframe/pull/194 * Use `importlib.metadata` for versioning by @nvictus in https://github.com/open2c/bioframe/pull/195 Bug fixes: * Overlap point segment patch #183 by @smitkadvani in https://github.com/open2c/bioframe/pull/184 * #167: Replaced np.int with int as the attribute is deprecated by numpy by @harshit148 in https://github.com/open2c/bioframe/pull/192 New Contributors: * @harshit148 made a first contribution in https://github.com/open2c/bioframe/pull/192 **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.6.3...v0.6.4 ## v0.6.3 Date: 2024-03-11 Fixes: * Prevent dropout from `closest` in some cases of left intervals with no neighbors by @agalitsyna in https://github.com/open2c/bioframe/pull/185 * Fix overlap returning float indexes causing failing tests (numpy v1.22.4, pandas v1.5.2) by @agalitsyna in https://github.com/open2c/bioframe/pull/185 **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.6.2...v0.6.3 ## v0.6.2 Date: 2024-02-08 Changes: * cols and df_view_col passed to downstream functions by @smitkadvani in https://github.com/open2c/bioframe/pull/182 Fixes: * Update to new UCSC hgdownload url by @golobor and @nvictus in https://github.com/open2c/bioframe/pull/187 **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.6.1...v0.6.2 ## v0.6.1 Date: 2024-01-08 API changes: Default behavior of `ensure_nullable` option in `overlap` was modified to minimize the possibility of regressions in libraries that depend on legacy behavior. * The new option was renamed `ensure_int` and is `True` by default. It ensures that output coordinate columns are always returned with an integer dtype, as was the case in prior versions. This is achieved by converting columns having non-nullable NumPy dtypes to Pandas nullable ones in the specific case where the result of an **outer join** generates missing values; otherwise, column dtypes are preserved unchanged in the output. * Unlike previous minor versions of bioframe, the nullable dtype chosen will have the **same underlying type** as the corresponding column from the input (i.e, an input dataframe using `np.uint32` start coordinates may yield a `pd.UInt32` start column in the output). * This behavior can be turned off by setting `ensure_int` to `False`, in which case outer joins on dataframes using NumPy dtypes may produce floating point output columns when missing values are introduced (stored as `NaN`), following the native casting behavior of such columns. **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.6.0...v0.6.1 ## v0.6.0 Date: 2024-01-04 API changes: * `overlap`: In previous versions, output coordinate columns were always converted to Pandas "nullable" `Int64` dtype before returning outer join results. In the interest of flexibility, memory efficiency, and least surprise, the coordinate columns returned in the output dataframe now preserve dtype from the input dataframes, following native type casting rules if missing data are introduced. We introduce the `ensure_nullable` argument to force Pandas nullable dtypes in the output coordinates. See the [docs](https://bioframe.readthedocs.io/en/latest/api-intervalops.html#bioframe.ops.overlap) for more details. (#178) Bug fixes: * Fixed `coverage` with custom `cols1` (#170) Documentation: * Added contributing guidelines and NumFOCUS affiliation. * Updated README and added CITATION.cff file. * Updated performance benchmarks. **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.5.1...v0.6.0 ## v0.5.1 Date: 2023-11-08 Bug fixes: * Series are treated like dict in `make_chromarms` **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.5.0...v0.5.1 ## v0.5.0 Date: 2023-10-05 API changes: * New builtin curated genome assembly database (metadata, chromsizes, cytobands): * `bioframe.list_assemblies()` * `bioframe.assembly_info()` * New UCSC RGB color converter utility #158 * Options added to `pair_by_distance` Bug fixes: * Make expand throw an error if both pad and scale are passed (#148) * Fixes to bioframe.select query interval semantics (#147) Maintenance: * Migrate to hatch build system and pyproject.toml * Various refactorings **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.4.1...v0.5.0 ## v0.4.1 Date: 2023-04-22 Bug fixes: * Fix bug introduced in the last release in `select` and `select_*` query interval semantics. Results of select are now consistent with the query interval being interpreted as half-open, closed on the left. **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.4.0...v0.4.1 ## v0.4.0 Date: 2023-03-23 API changes: * New strand-aware directionality options for `closest()` via `direction_col` #129. * New index-based range query selectors on single bioframes to complement `select()` #128: * `select_mask()` returns boolean indices corresponding to intervals that overlap the query region * `select_indices()` returns integer indices corresponding to intervals that overlap the query region * `select_labels()` returns pandas label indices corresponding to intervals that overlap the query region Bug fixes: * Import fixes in sandbox * Relax bioframe validator to permit using same column as start and end (e.g. point variants). **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.3.3...v0.4.0 ## v0.3.3 Date: 2022-02-28 Bug fixes: * fixed a couple functions returning an error instance instead of raising * fetch_mrna link fixed **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.3.2...v0.3.3 ## v0.3.2 Date: 2022-02-01 Bug fixes: * fixed error in is_contained * tutorial updates **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.3.1...v0.3.2 ## v0.3.1 Date: 2021-11-15 API changes: * `bioframe.sort_bedframe` does not append columns or modify their dtypes. **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.3.0...v0.3.1 ## v0.3.0 Date: 2021-08-31 Conceptual changes: * we formulated strict definitions for genomic intervals, dataframes, and their various properties. All bioframe functions are expected to follow to these definitions tightly. API changes: * reorganize modules: * ops - operations on genomic interval dataframes * extras - miscellaneous operations, most involving genomic sequences and gene annotations * vis - visualizations of genomic interval dataframes * core.arrops - operations on genomic interval arrays * core.checks - tests for definitions of genomic interval dataframes * core.construction - construction and sanitation of genomic interval dataframes * core.specs - specifications for the implementation of genomic intervals in pandas.dataframes (i.e. column names, datatypes, etc) * core.stringops - operations on genomic interval strings * io.fileops - I/O on common file formats for genomic data * io.schemas - schemas for standard tabular formats for genomic data storage * io.resources - interfaces to popular online genomic data resources * new functions: extras.pair_by_distance, ops.sort_bedframe, ops.assign_view, dataframe constructors * existing functions: * expand: take negative values and fractional values * overlap: change default suffixes, keep_order=True * subtract: add return_index and keep_order * enable pd.NA for missing values, typecasting New data: * add schemas for bedpe, gap, UCSCmRNA, pgsnp * add tables with curated detailed genome assembly information Bugfixes: * None?.. Miscellaneous: * speed up frac_gc is faster now * drop support for Python 3.6, add support for 3.9 **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.2.0...v0.3.0 ## v0.2.0 Date: 2020-12-02 API changes: * `read_chromsizes` and `fetch_chromsizes`: add new `as_bed` parameter. * `read_chromsizes` and `fetch_chromsizes`: revert to filtering chromosome names by default, but clearly expose `filter_chroms` kwarg. Bug fixes: * Fixed `bioframe.split` * Restored `frac_genome_coverage` **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.1.0...v0.2.0 ## v0.1.0 Date: 2020-09-23 First beta release. What's new: * New extensive dataframe genomic interval arithmetic toolsuite. * Improved region handling and region querying functions. * [Documentation!](https://bioframe.readthedocs.io/) Maintenance: * Dropped Python 2 support * Refactoring of various genome operations and resources. * Improved testing and linting **Full Changelog**: https://github.com/open2c/bioframe/compare/v0.0.12...v0.1.0 open2c-bioframe-4fe9b25/CITATION.cff000066400000000000000000000047171477525772300170320ustar00rootroot00000000000000cff-version: 1.2.0 type: software title: bioframe license: MIT repository-code: 'https://github.com/open2c/bioframe' message: >- If you use this software, please cite it using the metadata from this file. authors: - given-names: Nezar family-names: Abdennur orcid: 'https://orcid.org/0000-0001-5814-0864' - given-names: Geoffrey family-names: Fudenberg orcid: "https://orcid.org/0000-0001-5905-6517" - given-names: Ilya family-names: Flyamer orcid: "https://orcid.org/0000-0002-4892-4208" - given-names: Aleksandra family-names: Galitsyna orcid: "https://orcid.org/0000-0001-8969-5694" - given-names: Anton family-names: Goloborodko orcid: "https://orcid.org/0000-0002-2210-8616" - given-names: Maxim family-names: Imakaev orcid: "https://orcid.org/0000-0002-5320-2728" - given-names: Sergey family-names: Venev orcid: "https://orcid.org/0000-0002-1507-7460" abstract: >- Bioframe is a library to enable flexible and performant operations on genomic interval data frames in Python. keywords: - bioinformatics - genomics - ranges - intervals - dataframes - pandas - numpy - Python identifiers: - type: doi value: 10.5281/zenodo.3897573 description: Zenodo - type: doi value: 10.1101/2022.02.16.480748 description: bioRxiv preprint - type: doi value: 10.1093/bioinformatics/btae088 description: Publication preferred-citation: type: article title: "Bioframe: Operations on Genomic Intervals in Pandas Dataframes" authors: - family-names: Open2C - given-names: Nezar family-names: Abdennur orcid: 'https://orcid.org/0000-0001-5814-0864' - given-names: Geoffrey family-names: Fudenberg orcid: "https://orcid.org/0000-0001-5905-6517" - given-names: Ilya family-names: Flyamer name-suffix: M orcid: "https://orcid.org/0000-0002-4892-4208" - given-names: Aleksandra family-names: Galitsyna name-suffix: A orcid: "https://orcid.org/0000-0001-8969-5694" - given-names: Anton family-names: Goloborodko orcid: "https://orcid.org/0000-0002-2210-8616" - given-names: Maxim family-names: Imakaev orcid: "https://orcid.org/0000-0002-5320-2728" - given-names: Sergey family-names: Venev orcid: "https://orcid.org/0000-0002-1507-7460" journal: Bioinformatics year: 2024 url: "https://doi.org/10.1093/bioinformatics/btae088" doi: "10.1093/bioinformatics/btae088" open2c-bioframe-4fe9b25/CONTRIBUTING.md000066400000000000000000000126151477525772300173650ustar00rootroot00000000000000# Contributing ## General guidelines If you haven't contributed to open-source before, we recommend you read [this excellent guide by GitHub on how to contribute to open source](https://opensource.guide/how-to-contribute). The guide is long, so you can gloss over things you're familiar with. If you're not already familiar with it, we follow the [fork and pull model](https://help.github.com/articles/about-collaborative-development-models) on GitHub. Also, check out this recommended [git workflow](https://www.asmeurer.com/git-workflow/). ## Contributing Code This project has a number of requirements for all code contributed. * We follow the [PEP-8 style](https://www.python.org/dev/peps/pep-0008/) convention. * We use [NumPy-style docstrings](https://numpydoc.readthedocs.io/en/latest/format.html). * It's ideal if user-facing API changes or new features have documentation added. * It is best if all new functionality and/or bug fixes have unit tests added with each use-case. ## Setting up Your Development Environment This project uses the [hatch](https://hatch.pypa.io/latest/) project manager and build system. We recommend you install `hatch` as a global isolated application using [pipx](https://pipx.pypa.io/stable/). See other installation options [here](https://hatch.pypa.io/latest/install/). ```sh pipx install hatch ``` > [!NOTE] > Many custom command shortcuts are accessible through hatch (and shown below). See `tool.hatch.envs.default.scripts` in our project's `pyproject.toml` configuration file. After forking and cloning the repository, you can create an isolated Python development environment and install the package in "editable" (i.e. development) mode as follows: ```sh git clone https://github.com/open2c/bioframe.git cd bioframe hatch shell ``` The first time you run `hatch shell` the environment will be created and activated, and the package will be installed. In future sessions, running `hatch shell` will reactivate your development environment. > [!TIP] > If you prefer to store your virtual environments in your working directory (like classic virtualenvs) rather than in a centralized location (similar to conda), configure hatch as follows: > > ```sh > hatch config set dirs.env.virtual .venv > ``` > > This will make hatch set up its environments within the current working directory under `.venv`. Alternatively, if you prefer to manage your virtual environments yourself, you can install the package for development using, for example: ```sh python -m venv .venv source .venv/bin/activate pip install -e '.[dev,test,docs]' ``` For all pull requests, linting and unit tests are automatically run using the [GitHub Actions](https://docs.github.com/en/actions) Continuous Integration service. However, you are still encouraged to run these checks locally before pushing code to a PR. ## Linting and Formatting We use [ruff](https://docs.astral.sh/ruff/) for style checking. Run `ruff check .` or: ```sh hatch run lint ``` Ruff can fix a lot of errors itself. Run `ruff check --fix .` or: ```sh hatch run fix ``` Ruff includes a formatter that mimics [black](https://black.readthedocs.io/en/stable/). To automatically reformat your code, you can use `ruff format {source_file}`. We use [pre-commit](https://github.com/pre-commit/pre-commit) to make sure the coding style is enforced. You first need to install pre-commit and the corresponding git commit hooks: ```sh pip install pre-commit pre-commit install ``` The last command installs the hooks listed in `.pre-commit-config.yaml` locally into your git repo. If you do this, the checks will run automatically before every commit. You can also manually make sure your code satisfies the coding style: ```sh pre-commit run --all-files ``` ## Testing It is best if all new functionality and/or bug fixes have unit tests added with each use-case. We use [pytest](https://docs.pytest.org/en/latest) as our unit testing framework. Once you've configured your environment, you can just `cd` to the root of your repository and run `pytest` or: ```sh hatch run test ``` ## Documentation If a feature is stable and relatively finalized, it is time to add it to the documentation. If you are adding any private/public functions, it is best to add docstrings, to aid in reviewing code and also for the API reference. We use [Numpy style docstrings](https://numpydoc.readthedocs.io/en/latest/format.html>) and [Sphinx](http://www.sphinx-doc.org/en/stable) to document this library. Sphinx, in turn, uses [reStructuredText](http://www.sphinx-doc.org/en/stable/rest.html) as its markup language for adding code. We use the [Sphinx Autosummary extension](http://www.sphinx-doc.org/en/stable/ext/autosummary.html) to generate API references. You may want to look at `docs/api-*.rst` files to see how they look and where to add new functions, classes or modules. We also use the [myst_nb extension](https://myst-nb.readthedocs.io/en/latest/) to render Jupyter notebooks in the documentation. To build the documentation, run `sphinx-autobuild` using: ```sh hatch run docs ``` This will build the documentation and serve it on a local http server which listens for changes and automatically rebuilds. Documentation from the `main` branch and tagged releases is automatically built and hosted on [readthedocs](https://readthedocs.org/). ## Acknowledgments This document is based off of the [guidelines from the sparse project](https://github.com/pydata/sparse/blob/master/docs/contributing.rst). open2c-bioframe-4fe9b25/LICENSE000066400000000000000000000020741477525772300161370ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2016 Open2C Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. open2c-bioframe-4fe9b25/README.md000066400000000000000000000123741477525772300164150ustar00rootroot00000000000000# Bioframe: Operations on Genomic Interval Dataframes ![CI](https://github.com/open2c/bioframe/actions/workflows/ci.yml/badge.svg) [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/open2c/bioframe/main.svg)](https://results.pre-commit.ci/latest/github/open2c/bioframe/main) [![Docs status](https://readthedocs.org/projects/bioframe/badge/)](https://bioframe.readthedocs.io/en/latest/) [![Paper](https://img.shields.io/badge/DOI-10.1093%2Fbioinformatics%2Fbtae088-blue)](https://doi.org/10.1093/bioinformatics/btae088) [![Zenodo](https://zenodo.org/badge/69901992.svg)](https://zenodo.org/badge/latestdoi/69901992) [![Slack](https://img.shields.io/badge/chat-slack-%233F0F3F?logo=slack)](https://bit.ly/open2c-slack) [![NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](https://www.numfocus.org) Bioframe enables flexible and scalable operations on genomic interval dataframes in Python. Bioframe is built directly on top of [Pandas](https://pandas.pydata.org/). Bioframe provides: * A variety of genomic interval operations that work directly on dataframes. * Operations for special classes of genomic intervals, including chromosome arms and fixed-size bins. * Conveniences for diverse tabular genomic data formats and loading genome assembly summary information. Read the [documentation](https://bioframe.readthedocs.io/en/latest/), including the [guide](https://bioframe.readthedocs.io/en/latest/guide-intervalops.html), as well as the [publication](https://doi.org/10.1093/bioinformatics/btae088) for more information. Bioframe is an Affiliated Project of [NumFOCUS](https://www.numfocus.org). ## Installation Bioframe is available on [PyPI](https://pypi.org/project/bioframe/) and [bioconda](https://bioconda.github.io/recipes/bioframe/README.html): ```sh pip install bioframe ``` ## Contributing Interested in contributing to bioframe? That's great! To get started, check out the [contributing guide](https://github.com/open2c/bioframe/blob/main/CONTRIBUTING.md). Discussions about the project roadmap take place on the [Open2C Slack](https://bit.ly/open2c-slack) and regular developer meetings scheduled there. Anyone can join and participate! ## Interval operations Key genomic interval operations in bioframe include: - `overlap`: Find pairs of overlapping genomic intervals between two dataframes. - `closest`: For every interval in a dataframe, find the closest intervals in a second dataframe. - `cluster`: Group overlapping intervals in a dataframe into clusters. - `complement`: Find genomic intervals that are not covered by any interval from a dataframe. Bioframe additionally has functions that are frequently used for genomic interval operations and can be expressed as combinations of these core operations and dataframe operations, including: `coverage`, `expand`, `merge`, `select`, and `subtract`. To `overlap` two dataframes, call: ```python import bioframe as bf bf.overlap(df1, df2) ``` For these two input dataframes, with intervals all on the same chromosome: `overlap` will return the following interval pairs as overlaps: To `merge` all overlapping intervals in a dataframe, call: ```python import bioframe as bf bf.merge(df1) ``` For this input dataframe, with intervals all on the same chromosome: `merge` will return a new dataframe with these merged intervals: See the [guide](https://bioframe.readthedocs.io/en/latest/guide-intervalops.html) for visualizations of other interval operations in bioframe. ## File I/O Bioframe includes utilities for reading genomic file formats into dataframes and vice versa. One handy function is `read_table` which mirrors pandas’s read_csv/read_table but provides a [`schema`](https://github.com/open2c/bioframe/blob/main/bioframe/io/schemas.py) argument to populate column names for common tabular file formats. ```python jaspar_url = 'http://expdata.cmmt.ubc.ca/JASPAR/downloads/UCSC_tracks/2022/hg38/MA0139.1.tsv.gz' ctcf_motif_calls = bioframe.read_table(jaspar_url, schema='jaspar', skiprows=1) ``` ## Tutorials See this [jupyter notebook](https://github.com/open2c/bioframe/tree/master/docs/tutorials/tutorial_assign_motifs_to_peaks.ipynb) for an example of how to assign TF motifs to ChIP-seq peaks using bioframe. ## Citing If you use ***bioframe*** in your work, please cite: ```bibtex @article{bioframe_2024, author = {Open2C and Abdennur, Nezar and Fudenberg, Geoffrey and Flyamer, Ilya M and Galitsyna, Aleksandra A and Goloborodko, Anton and Imakaev, Maxim and Venev, Sergey}, doi = {10.1093/bioinformatics/btae088}, journal = {Bioinformatics}, title = {{Bioframe: Operations on Genomic Intervals in Pandas Dataframes}}, year = {2024} } ``` open2c-bioframe-4fe9b25/bioframe/000077500000000000000000000000001477525772300167135ustar00rootroot00000000000000open2c-bioframe-4fe9b25/bioframe/__init__.py000066400000000000000000000055041477525772300210300ustar00rootroot00000000000000try: from importlib.metadata import PackageNotFoundError, version except ImportError: from importlib_metadata import PackageNotFoundError, version try: __version__ = version("bioframe") except PackageNotFoundError: __version__ = "unknown" __all__ = [ "arrops", "from_any", "from_dict", "from_list", "from_series", "is_bedframe", "is_cataloged", "is_chrom_dtype", "is_complete_ucsc_string", "is_contained", "is_covering", "is_overlapping", "is_sorted", "is_tiling", "is_viewframe", "make_viewframe", "parse_region", "parse_region_string", "sanitize_bedframe", "to_ucsc_string", "update_default_colnames", "binnify", "digest", "frac_gc", "frac_gene_coverage", "frac_mapped", "make_chromarms", "pair_by_distance", "seq_gc", "SCHEMAS", "UCSCClient", "assemblies_available", "assembly_info", "fetch_centromeres", "fetch_chromsizes", "load_fasta", "read_alignments", "read_bam", "read_bigbed", "read_bigwig", "read_chromsizes", "read_pairix", "read_tabix", "read_table", "to_bed", "to_bigbed", "to_bigwig", "assign_view", "closest", "cluster", "complement", "count_overlaps", "coverage", "expand", "merge", "overlap", "mark_runs", "merge_runs", "select", "select_indices", "select_labels", "select_mask", "setdiff", "sort_bedframe", "subtract", "trim", "plot_intervals", "to_ucsc_colorstring", ] from .core import ( arrops, from_any, from_dict, from_list, from_series, is_bedframe, is_cataloged, is_chrom_dtype, is_complete_ucsc_string, is_contained, is_covering, is_overlapping, is_sorted, is_tiling, is_viewframe, make_viewframe, parse_region, parse_region_string, sanitize_bedframe, to_ucsc_string, update_default_colnames, ) from .extras import ( binnify, digest, frac_gc, frac_gene_coverage, frac_mapped, make_chromarms, mark_runs, merge_runs, pair_by_distance, seq_gc, ) from .io import ( SCHEMAS, UCSCClient, assemblies_available, assembly_info, fetch_centromeres, fetch_chromsizes, load_fasta, read_alignments, read_bam, read_bigbed, read_bigwig, read_chromsizes, read_pairix, read_tabix, read_table, to_bed, to_bigbed, to_bigwig, ) from .ops import ( assign_view, closest, cluster, complement, count_overlaps, coverage, expand, merge, overlap, select, select_indices, select_labels, select_mask, setdiff, sort_bedframe, subtract, trim, ) from .vis import plot_intervals, to_ucsc_colorstring del version, PackageNotFoundError open2c-bioframe-4fe9b25/bioframe/core/000077500000000000000000000000001477525772300176435ustar00rootroot00000000000000open2c-bioframe-4fe9b25/bioframe/core/__init__.py000066400000000000000000000016631477525772300217620ustar00rootroot00000000000000from . import arrops from .checks import ( is_bedframe, is_cataloged, is_contained, is_covering, is_overlapping, is_sorted, is_tiling, is_viewframe, ) from .construction import ( from_any, from_dict, from_list, from_series, make_viewframe, sanitize_bedframe, ) from .specs import is_chrom_dtype, update_default_colnames from .stringops import ( is_complete_ucsc_string, parse_region, parse_region_string, to_ucsc_string, ) __all__ = [ "arrops", "is_bedframe", "is_cataloged", "is_contained", "is_covering", "is_overlapping", "is_sorted", "is_tiling", "is_viewframe", "from_any", "from_dict", "from_list", "from_series", "make_viewframe", "sanitize_bedframe", "is_chrom_dtype", "update_default_colnames", "is_complete_ucsc_string", "parse_region", "parse_region_string", "to_ucsc_string", ] open2c-bioframe-4fe9b25/bioframe/core/arrops.py000066400000000000000000000611261477525772300215310ustar00rootroot00000000000000import re import warnings import numpy as np import pandas as pd INT64_MAX = np.iinfo(np.int64).max def natsort_key(s, _NS_REGEX=re.compile(r"(\d+)", re.U)): return tuple([int(x) if x.isdigit() else x for x in _NS_REGEX.split(s) if x]) def natsorted(iterable): return sorted(iterable, key=natsort_key) def argnatsort(array): array = np.asarray(array) if not len(array): return np.array([], dtype=int) cols = tuple(zip(*(natsort_key(x) for x in array))) return np.lexsort(cols[::-1]) # numpy's lexsort is ass-backwards def _find_block_span(arr, val): """Find the first and the last occurence + 1 of the value in the array.""" # it can be done via bisection, but for now BRUTE FORCE block_idxs = np.where(arr == val)[0] lo, hi = block_idxs[0], block_idxs[-1] + 1 return lo, hi def interweave(a, b): """ Interweave two arrays. Parameters ---------- a, b : numpy.ndarray Arrays to interweave, must have the same length/ Returns ------- out : numpy.ndarray Array of interweaved values from a and b. Notes ----- From https://stackoverflow.com/questions/5347065/interweaving-two-numpy-arrays """ out = np.empty((a.size + b.size,), dtype=a.dtype) out[0::2] = a out[1::2] = b return out def sum_slices(arr, starts, ends): """ Calculate sums of slices of an array. Parameters ---------- arr : numpy.ndarray starts : numpy.ndarray Starts for each slice ends : numpy.ndarray Stops for each slice Returns ------- sums : numpy.ndarray Sums of the slices. """ sums = np.add.reduceat(arr, interweave(starts, ends))[::2] sums[starts == ends] = 0 return sums def arange_multi(starts, stops=None, lengths=None): """ Create concatenated ranges of integers for multiple start/length. Parameters ---------- starts : numpy.ndarray Starts for each range stops : numpy.ndarray Stops for each range lengths : numpy.ndarray Lengths for each range. Either stops or lengths must be provided. Returns ------- concat_ranges : numpy.ndarray Concatenated ranges. Notes ----- See the following illustrative example: starts = np.array([1, 3, 4, 6]) stops = np.array([1, 5, 7, 6]) print arange_multi(starts, lengths) >>> [3 4 4 5 6] From: https://codereview.stackexchange.com/questions/83018/vectorized-numpy-version-of-arange-with-multiple-start-stop """ if (stops is None) == (lengths is None): raise ValueError("Either stops or lengths must be provided!") if lengths is None: lengths = stops - starts if np.isscalar(starts): starts = np.full(len(stops), starts) # Repeat start position index length times and concatenate cat_start = np.repeat(starts, lengths) # Create group counter that resets for each start/length cat_counter = np.arange(lengths.sum()) - np.repeat( lengths.cumsum() - lengths, lengths ) # Add group counter to group specific starts cat_range = cat_start + cat_counter return cat_range def _check_overlap(starts1, ends1, starts2, ends2, closed=False): """ Take pairs of intervals and test if each pair has an overlap. Parameters ---------- starts1, ends1, starts2, ends2 : numpy.ndarray Interval coordinates. All four arrays must have the same size. Warning: if provided as pandas.Series, indices will be ignored. closed : bool If True then treat intervals as closed and accept single-point overlaps. Returns ------- have_overlap : numpy.ndarray A boolean array where the i-th element says if the i-th interval in set 1 overlaps the i-th interval in set 2. """ if not (starts1.size == ends1.size == starts2.size == ends2.size): raise ValueError("All four input arrays must have the same size.") if closed: return (starts1 <= ends2) & (starts2 <= ends1) else: return (starts1 < ends2) & (starts2 < ends1) def _size_overlap(starts1, ends1, starts2, ends2): """ Take pairs of intervals and return the length of an overlap in each pair. Parameters ---------- starts1, ends1, starts2, ends2 : numpy.ndarray Interval coordinates. All four arrays must have the same size. Warning: if provided as pandas.Series, indices will be ignored. Returns ------- overlap_size : numpy.ndarray An array where the i-th element contains the length of an overlap between the i-th interval in set 1 and the i-th interval in set 2. 0 if the intervals overlap by a single point, -1 if they do not overlap. """ overlap_size = np.minimum(ends1, ends2) - np.maximum(starts1, starts2) overlap_size[overlap_size < 0] = -1 return overlap_size def _overlap_intervals_legacy(starts1, ends1, starts2, ends2, closed=False, sort=False): """ Take two sets of intervals and return the indices of pairs of overlapping intervals. Parameters ---------- starts1, ends1, starts2, ends2 : numpy.ndarray Interval coordinates. Warning: if provided as pandas.Series, indices will be ignored. closed : bool If True, then treat intervals as closed and report single-point overlaps. Returns ------- overlap_ids : numpy.ndarray An Nx2 array containing the indices of pairs of overlapping intervals. The 1st column contains ids from the 1st set, the 2nd column has ids from the 2nd set. """ for vec in [starts1, ends1, starts2, ends2]: if isinstance(vec, pd.Series): warnings.warn( "One of the inputs is provided as pandas.Series and its index " "will be ignored.", SyntaxWarning, stacklevel=2, ) starts1 = np.asarray(starts1) ends1 = np.asarray(ends1) starts2 = np.asarray(starts2) ends2 = np.asarray(ends2) # Concatenate intervals lists n1 = len(starts1) n2 = len(starts2) starts = np.concatenate([starts1, starts2]) ends = np.concatenate([ends1, ends2]) # Encode interval ids as 1-based, # negative ids for the 1st set, positive ids for 2nd set ids = np.concatenate([-np.arange(1, n1 + 1), np.arange(1, n2 + 1)]) # Sort all intervals together order = np.lexsort([ends, starts]) starts, ends, ids = starts[order], ends[order], ids[order] # Find interval overlaps match_starts = np.arange(0, n1 + n2) match_ends = np.searchsorted(starts, ends, "right" if closed else "left") # Ignore self-overlaps match_mask = match_ends > match_starts + 1 match_starts, match_ends = match_starts[match_mask], match_ends[match_mask] # Restore overlap_ids = np.vstack( [ np.repeat(ids[match_starts], match_ends - match_starts - 1), ids[arange_multi(match_starts + 1, match_ends)], ] ).T # Drop same-set overlaps overlap_ids = overlap_ids[overlap_ids[:, 0] * overlap_ids[:, 1] <= 0] # Flip overlaps, such that the 1st column contains ids from the 1st set, # the 2nd column contains ids from the 2nd set. overlap_ids.sort(axis=-1) # Restore original indexes, overlap_ids[:, 0] = overlap_ids[:, 0] * (-1) - 1 overlap_ids[:, 1] = overlap_ids[:, 1] - 1 # Sort overlaps according to the 1st if sort: overlap_ids = overlap_ids[np.lexsort([overlap_ids[:, 1], overlap_ids[:, 0]])] return overlap_ids def _convert_points_to_len1_segments(starts, ends): """ Convert points to len1 segments for internal use in overlap(). This enables desired overlap behavior for points and preserves behavior for semi-open intervals of len>=1. Parameters ---------- starts, ends : numpy.ndarray Returns ------- pseudo_ends : numpy.ndarray An array of pseudo-ends for overlapping intervals. """ pseudo_ends = ends.copy() pseudo_ends[ends == starts] += 1 return [starts, pseudo_ends] def overlap_intervals(starts1, ends1, starts2, ends2, closed=False, sort=False): """ Take two sets of intervals and return the indices of pairs of overlapping intervals. Parameters ---------- starts1, ends1, starts2, ends2 : numpy.ndarray Interval coordinates. Warning: if provided as pandas.Series, indices will be ignored. closed : bool If True, then treat intervals as closed and report single-point overlaps. Returns ------- ovids1, ovids2 : numpy.ndarray Two 1D arrays containing the indices of pairs of overlapping intervals. The 1st contains ids from the 1st set, the 2nd has ids from the 2nd set. """ for vec in [starts1, ends1, starts2, ends2]: if isinstance(vec, pd.Series): warnings.warn( "One of the inputs is provided as pandas.Series and its index " "will be ignored.", SyntaxWarning, stacklevel=2, ) starts1 = np.asarray(starts1) ends1 = np.asarray(ends1) starts1, ends1 = _convert_points_to_len1_segments(starts1, ends1) starts2 = np.asarray(starts2) ends2 = np.asarray(ends2) starts2, ends2 = _convert_points_to_len1_segments(starts2, ends2) # Concatenate intervals lists n1 = len(starts1) n2 = len(starts2) ids1 = np.arange(0, n1) ids2 = np.arange(0, n2) # Sort all intervals together order1 = np.lexsort([ends1, starts1]) order2 = np.lexsort([ends2, starts2]) starts1, ends1, ids1 = starts1[order1], ends1[order1], ids1[order1] starts2, ends2, ids2 = starts2[order2], ends2[order2], ids2[order2] # Find interval overlaps match_2in1_starts = np.searchsorted(starts2, starts1, "left") match_2in1_ends = np.searchsorted(starts2, ends1, "right" if closed else "left") # "right" is intentional here to avoid duplication match_1in2_starts = np.searchsorted(starts1, starts2, "right") match_1in2_ends = np.searchsorted(starts1, ends2, "right" if closed else "left") # Ignore self-overlaps match_2in1_mask = match_2in1_ends > match_2in1_starts match_1in2_mask = match_1in2_ends > match_1in2_starts match_2in1_starts, match_2in1_ends = ( match_2in1_starts[match_2in1_mask], match_2in1_ends[match_2in1_mask], ) match_1in2_starts, match_1in2_ends = ( match_1in2_starts[match_1in2_mask], match_1in2_ends[match_1in2_mask], ) # Generate IDs of pairs of overlapping intervals ovids1 = np.concatenate([ np.repeat(ids1[match_2in1_mask], match_2in1_ends - match_2in1_starts), ids1[arange_multi(match_1in2_starts, match_1in2_ends)], ]) ovids2 = np.concatenate([ ids2[arange_multi(match_2in1_starts, match_2in1_ends)], np.repeat(ids2[match_1in2_mask], match_1in2_ends - match_1in2_starts), ]) if sort: idx = np.lexsort([ovids2, ovids1]) ovids1 = ovids1[idx] ovids2 = ovids2[idx] return ovids1, ovids2 def overlap_intervals_outer(starts1, ends1, starts2, ends2, closed=False): """ Take two sets of intervals and return the indices of pairs of overlapping intervals, as well as the indices of the intervals that do not overlap any other interval. Parameters ---------- starts1, ends1, starts2, ends2 : numpy.ndarray Interval coordinates. Warning: if provided as pandas.Series, indices will be ignored. closed : bool If True, then treat intervals as closed and report single-point overlaps. Returns ------- ovids1, ovids2 : numpy.ndarray Two 1D arrays containing the indices of pairs of overlapping intervals. The 1st contains ids from the 1st set, the 2nd has ids from the 2nd set. no_overlap_ids1, no_overlap_ids2 : numpy.ndarray Two 1D arrays containing the indices of intervals in sets 1 and 2 respectively that do not overlap with any interval in the other set. """ n1, n2 = len(starts1), len(starts2) ovids1, ovids2 = overlap_intervals(starts1, ends1, starts2, ends2, closed=closed) if n1 > 0: no_overlap_ids1 = np.setdiff1d(np.arange(len(starts1)), ovids1) else: no_overlap_ids1 = np.array([], dtype=int) if n2 > 0: no_overlap_ids2 = np.setdiff1d(np.arange(len(starts2)), ovids2) else: no_overlap_ids2 = np.array([], dtype=int) return ovids1, ovids2, no_overlap_ids1, no_overlap_ids2 def merge_intervals(starts, ends, min_dist=0): """ Merge overlapping intervals. Parameters ---------- starts, ends : numpy.ndarray Interval coordinates. Warning: if provided as pandas.Series, indices will be ignored. min_dist : float or None If provided, merge intervals separated by this distance or less. If None, do not merge non-overlapping intervals. Using min_dist=0 and min_dist=None will bring different results. bioframe uses semi-open intervals, so interval pairs [0,1) and [1,2) do not overlap, but are separated by a distance of 0. Such intervals are not merged when min_dist=None, but are merged when min_dist=0. Returns ------- cluster_ids : numpy.ndarray The indices of interval clusters that each interval belongs to. cluster_starts : numpy.ndarray cluster_ends : numpy.ndarray The spans of the merged intervals. Notes ----- From https://stackoverflow.com/questions/43600878/merging-overlapping-intervals/58976449#58976449 """ for vec in [starts, ends]: if isinstance(vec, pd.Series): warnings.warn( "One of the inputs is provided as pandas.Series and its index " "will be ignored.", SyntaxWarning, stacklevel=2, ) starts = np.asarray(starts) ends = np.asarray(ends) order = np.lexsort([ends, starts]) starts, ends = starts[order], ends[order] ends = np.maximum.accumulate(ends) cluster_borders = np.zeros(len(starts) + 1, dtype=bool) cluster_borders[0] = True cluster_borders[-1] = True if min_dist is not None: cluster_borders[1:-1] = starts[1:] > ends[:-1] + min_dist else: cluster_borders[1:-1] = starts[1:] >= ends[:-1] cluster_ids_sorted = np.cumsum(cluster_borders)[:-1] - 1 cluster_ids = np.full(starts.shape[0], -1) cluster_ids[order] = cluster_ids_sorted cluster_starts = starts[:][cluster_borders[:-1]] cluster_ends = ends[:][cluster_borders[1:]] return cluster_ids, cluster_starts, cluster_ends def complement_intervals( starts, ends, bounds=(0, INT64_MAX), ): _, merged_starts, merged_ends = merge_intervals(starts, ends, min_dist=0) lo = np.searchsorted(merged_ends, bounds[0], "right") hi = np.searchsorted(merged_starts, bounds[1], "left") merged_starts = merged_starts[lo:hi] merged_ends = merged_ends[lo:hi] # Trim the complement to the bounds. complement_starts = np.r_[bounds[0], merged_ends] complement_ends = np.r_[merged_starts, bounds[1]] lo = 1 if (complement_starts[0] >= complement_ends[0]) else 0 hi = -1 if (complement_starts[-1] >= complement_ends[-1]) else None complement_starts = complement_starts[lo:hi] complement_ends = complement_ends[lo:hi] return complement_starts, complement_ends def _closest_intervals_nooverlap( starts1, ends1, starts2, ends2, direction, tie_arr=None, k=1 ): """ For every interval in set 1, return the indices of k closest intervals from set 2 to the left from the interval (with smaller coordinate). Overlapping intervals from set 2 are not reported, unless they overlap by a single point. Parameters ---------- starts1, ends1, starts2, ends2 : numpy.ndarray Interval coordinates. Warning: if provided as pandas.Series, indices will be ignored. direction : str ("left" or "right") Orientation of closest interval search tie_arr : numpy.ndarray or None Extra data describing intervals in set 2 to break ties when multiple intervals are located at the same distance. An interval with the *lowest* value is selected. k : int The number of neighbors to report. Returns ------- ids1, ids2: numpy.ndarray Two arrays containing the indices of pairs of closest intervals, reported for the neighbors in specified direction (by genomic coordinate). The two arrays are the inteval ids from set 1, ids of the closest intevals from set 2. """ for vec in [starts1, ends1, starts2, ends2]: if isinstance(vec, pd.Series): warnings.warn( "One of the inputs is provided as pandas.Series " "and its index will be ignored.", SyntaxWarning, stacklevel=2, ) starts1 = np.asarray(starts1) ends1 = np.asarray(ends1) starts2 = np.asarray(starts2) ends2 = np.asarray(ends2) n1 = starts1.shape[0] n2 = starts2.shape[0] ids1 = np.array([], dtype=int) ids2 = np.array([], dtype=int) if k > 0 and direction == "left": if tie_arr is None: ends2_sort_order = np.argsort(ends2) else: ends2_sort_order = np.lexsort([-tie_arr, ends2]) ids2_endsorted = np.arange(0, n2)[ends2_sort_order] ends2_sorted = ends2[ends2_sort_order] left_closest_endidx = np.searchsorted(ends2_sorted, starts1, "right") left_closest_startidx = np.maximum(left_closest_endidx - k, 0) int1_ids = np.repeat(np.arange(n1), left_closest_endidx - left_closest_startidx) int2_sorted_ids = arange_multi(left_closest_startidx, left_closest_endidx) ids1 = int1_ids ids2 = ids2_endsorted[int2_sorted_ids] elif k > 0 and direction == "right": if tie_arr is None: starts2_sort_order = np.argsort(starts2) else: starts2_sort_order = np.lexsort([tie_arr, starts2]) ids2_startsorted = np.arange(0, n2)[starts2_sort_order] starts2_sorted = starts2[starts2_sort_order] right_closest_startidx = np.searchsorted(starts2_sorted, ends1, "left") right_closest_endidx = np.minimum(right_closest_startidx + k, n2) int1_ids = np.repeat( np.arange(n1), right_closest_endidx - right_closest_startidx ) int2_sorted_ids = arange_multi(right_closest_startidx, right_closest_endidx) ids1 = int1_ids ids2 = ids2_startsorted[int2_sorted_ids] return ids1, ids2 def closest_intervals( starts1, ends1, starts2=None, ends2=None, k=1, tie_arr=None, ignore_overlaps=False, ignore_upstream=False, ignore_downstream=False, along=None, ): """ For every interval in set 1, return the indices of k closest intervals from set 2. Parameters ---------- starts1, ends1, starts2, ends2 : numpy.ndarray Interval coordinates. Warning: if provided as pandas.Series, indices will be ignored. If start2 and ends2 are None, find closest intervals within the same set. k : int The number of neighbors to report. tie_arr : numpy.ndarray or None Extra data describing intervals in set 2 to break ties when multiple intervals are located at the same distance. Intervals with *lower* tie_arr values will be given priority. ignore_overlaps : bool If True, ignore set 2 intervals that overlap with set 1 intervals. ignore_upstream, ignore_downstream : bool If True, ignore set 2 intervals upstream/downstream of set 1 intervals. along : numpy.ndarray with dtype bool or None Strand vector to define the upstream/downstream orientation of the intervals. Returns ------- closest_ids1, closest_ids2 : numpy.ndarray Two arrays containing the indices of pairs of closest intervals. The 1st array contains ids from the 1st set, the 2nd array has ids from the 2nd set. """ # Get overlaps if ignore_overlaps: ovids1, ovids2 = np.array([], dtype=int), np.array([], dtype=int) elif (starts2 is None) and (ends2 is None): starts2, ends2 = starts1, ends1 ovids1, ovids2 = overlap_intervals(starts1, ends1, starts2, ends2) mask = ovids1 != ovids2 ovids1 = ovids1[mask] ovids2 = ovids2[mask] else: ovids1, ovids2 = overlap_intervals(starts1, ends1, starts2, ends2) # Get non-overlapping nearest neighbors n = len(starts1) if along is None: along = np.ones(n, dtype=bool) # + stranded intervals pos_starts1, pos_ends1 = starts1[along], ends1[along] pos_up1, pos_up2 = _closest_intervals_nooverlap( pos_starts1, pos_ends1, starts2, ends2, direction="left", tie_arr=tie_arr, k=0 if ignore_upstream else k, ) pos_dn1, pos_dn2 = _closest_intervals_nooverlap( pos_starts1, pos_ends1, starts2, ends2, direction="right", tie_arr=tie_arr, k=0 if ignore_downstream else k, ) # - stranded intervals neg_starts1, neg_ends1 = starts1[~along], ends1[~along] neg_up1, neg_up2 = _closest_intervals_nooverlap( neg_starts1, neg_ends1, starts2, ends2, direction="right", tie_arr=tie_arr, k=0 if ignore_upstream else k, ) neg_dn1, neg_dn2 = _closest_intervals_nooverlap( neg_starts1, neg_ends1, starts2, ends2, direction="left", tie_arr=tie_arr, k=0 if ignore_downstream else k, ) # Reconstruct original indices (b/c we split ranges by strand above) pos_ids = np.where(along)[0] neg_ids = np.where(~along)[0] pos_up1 = pos_ids[pos_up1] pos_dn1 = pos_ids[pos_dn1] neg_dn1 = neg_ids[neg_dn1] neg_up1 = neg_ids[neg_up1] # Combine by absolute search direction left_ids1 = np.concatenate([pos_up1, neg_dn1]) left_ids2 = np.concatenate([pos_up2, neg_dn2]) right_ids1 = np.concatenate([neg_up1, pos_dn1]) right_ids2 = np.concatenate([neg_up2, pos_dn2]) # Increase the distance by 1 to distinguish between overlapping # and non-overlapping set 2 intervals. left_dists = starts1[left_ids1] - ends2[left_ids2] + 1 right_dists = starts2[right_ids2] - ends1[right_ids1] + 1 # Combine the results events1 = np.concatenate([left_ids1, right_ids1, ovids1]) events2 = np.concatenate([left_ids2, right_ids2, ovids2]) dists = np.concatenate( [left_dists, right_dists, np.zeros(ovids1.shape[0])] ) if len(events1) == 0: return np.array([], dtype=int), np.array([], dtype=int) # Sort by distance to set 1 intervals and, if present, by the tie-breaking # data array. if tie_arr is None: order = np.lexsort([events2, dists, events1]) else: order = np.lexsort([events2, tie_arr, dists, events1]) events1 = events1[order] events2 = events2[order] # Prune the results to the k nearest neighbors # For each sorted run of set 1 intervals, select up to k entries run_borders = np.where(np.r_[True, events1[:-1] != events1[1:], True])[0] run_starts = run_borders[:-1] run_ends = run_borders[1:] idx = arange_multi( run_starts, lengths=np.minimum(k, run_ends - run_starts), ) return events1[idx], events2[idx] def coverage_intervals_rle(starts, ends, weights=None): n = starts.shape[0] if weights is None: weights = np.ones(n, dtype=np.int64) borders = np.r_[starts, ends] coverage_change = np.r_[weights, -1 * weights] borders_order = np.argsort(borders) borders = borders[borders_order] coverage = np.cumsum(coverage_change[borders_order]) return borders, coverage def stack_intervals(starts, ends): n = starts.shape[0] borders = np.r_[starts, ends] lens = np.r_[ends - starts, ends - starts] border_types = np.r_[np.ones_like(starts), -1 * np.ones_like(ends)] border_ids = np.r_[np.arange(1, n + 1), -1 * np.arange(1, n + 1)] border_order = np.lexsort([-lens, border_types, borders]) borders, border_ids = borders[border_order], border_ids[border_order] occupancy = np.zeros(2, dtype=bool) levels = -1 * np.ones(n, dtype=np.int64) for border_id in border_ids: interval_id = np.abs(border_id) - 1 if border_id > 0: if occupancy.sum() == occupancy.shape[0]: occupancy = np.r_[occupancy, np.zeros_like(occupancy)] new_level = np.where(~occupancy)[0][0] levels[interval_id] = new_level occupancy[new_level] = True if border_id < 0: occupancy[levels[interval_id]] = False return levels open2c-bioframe-4fe9b25/bioframe/core/checks.py000066400000000000000000000353571477525772300214720ustar00rootroot00000000000000import numpy as np import pandas as pd from .. import ops from . import construction from .specs import _get_default_colnames, _verify_column_dtypes, _verify_columns __all__ = [ "is_bedframe", "is_cataloged", "is_overlapping", "is_viewframe", "is_contained", "is_covering", "is_tiling", "is_sorted", ] def is_bedframe( df, raise_errors=False, cols=None, ): """ Checks that required bedframe properties are satisfied for dataframe `df`. This includes: - chrom, start, end columns - columns have valid dtypes - for each interval, if any of chrom, start, end are null, then all are null - all starts < ends. Parameters ---------- df : pandas.DataFrame raise_errors : bool, optional [default: False] If True, raises errors instead of returning a boolean False for invalid properties. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- is_bedframe:bool Notes ----- Valid dtypes for chrom are object, string, or categorical. Valid dtypes for start and end are int/Int64Dtype. """ ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols if not _verify_columns(df, [ck1, sk1, ek1], return_as_bool=True): if raise_errors: raise TypeError("Invalid bedFrame: Invalid column names") return False if not _verify_column_dtypes(df, cols=[ck1, sk1, ek1], return_as_bool=True): if raise_errors: raise TypeError("Invalid bedFrame: Invalid column dtypes") return False nan_intervals = pd.isnull(df[[ck1, sk1, ek1]]) if (~(~nan_intervals.any(axis=1) | nan_intervals.all(axis=1))).any(): if raise_errors: raise ValueError( "Invalid bedFrame: Invalid null values " "(if any of chrom, start, end are null, then all must be null)" ) return False if ((df[ek1] - df[sk1]) < 0).any(): if raise_errors: raise ValueError( f"Invalid bedframe: starts exceed ends for " f"{sum((df[ek1] - df[sk1]) < 0)} intervals" ) return False return True def is_cataloged( df, view_df, raise_errors=False, df_view_col="view_region", view_name_col="name" ): """ Tests if all region names in `df[df_view_col]` are present in `view_df[view_name_col]`. Parameters ---------- df : pandas.DataFrame view_df : pandas.DataFrame raise_errors : bool If True, raises errors instead of returning a boolean False for invalid properties. Default False. df_view_col: str Name of column from df that indicates region in view. view_name_col: str Name of column from view that specifies region name. Returns ------- is_cataloged:bool Notes ----- Does not check if names in `view_df[view_name_col]` are unique. """ if not _verify_columns(df, [df_view_col], return_as_bool=True): if raise_errors: raise ValueError(f"Could not find `{df_view_col}` column in df") return False if not _verify_columns(view_df, [view_name_col], return_as_bool=True): if raise_errors: raise ValueError(f"Could not find \ `{view_name_col}` \ column in view_df") return False if not set(df[df_view_col].copy().dropna().values).issubset( set(view_df[view_name_col].values) ): if raise_errors: missing_regions = set(df[df_view_col].values).difference( set(view_df[view_name_col].values) ) raise ValueError( f"The following regions in df[df_view_col] not in " f"view_df[view_name_col]: \n{missing_regions}" ) return False return True def is_overlapping(df, cols=None): """ Tests if any genomic intervals in a bioframe `df` overlap. Also see :func:`bioframe.ops.merge()`. Parameters ---------- df : pandas.DataFrame cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- is_overlapping:bool """ from ..ops import merge ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols df_merged = merge(df, cols=cols) total_interval_len = np.sum((df[ek1] - df[sk1]).values) total_interval_len_merged = np.sum((df_merged[ek1] - df_merged[sk1]).values) if total_interval_len > total_interval_len_merged: return True else: return False def is_viewframe(region_df, raise_errors=False, view_name_col="name", cols=None): """ Checks that `region_df` is a valid viewFrame. This includes: - it satisfies requirements for a bedframe, including columns for ('chrom', 'start', 'end') - it has an additional column, view_name_col, with default 'name' - it does not contain null values - entries in the view_name_col are unique. - intervals are non-overlapping Parameters ---------- region_df : pandas.DataFrame Dataframe of genomic intervals to be tested. raise_errors : bool If True, raises errors instead of returning a boolean False for invalid properties. Default False. view_name_col : str Specifies column name of the view regions. Default 'name'. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- is_viewframe:bool """ ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols if not _verify_columns( region_df, [ck1, sk1, ek1, view_name_col], return_as_bool=True ): if raise_errors: raise TypeError("Invalid view: invalid column names") return False if not is_bedframe(region_df, cols=cols): if raise_errors: raise ValueError("Invalid view: not a bedframe") return False if pd.isna(region_df).values.any(): if raise_errors: raise ValueError("Invalid view: cannot contain NAs") return False if len(set(region_df[view_name_col])) < len(region_df[view_name_col].values): if raise_errors: raise ValueError( "Invalid view: entries in \ region_df[view_name_col] must be unique" ) return False if is_overlapping(region_df, cols=cols): if raise_errors: raise ValueError("Invalid view: entries must be non-overlapping") return False return True def is_contained( df, view_df, raise_errors=False, df_view_col=None, view_name_col="name", cols=None, cols_view=None, ): """ Tests if all genomic intervals in a bioframe `df` are cataloged and do not extend beyond their associated region in the view `view_df`. Parameters ---------- df : pandas.DataFrame view_df : pandas.DataFrame Valid viewframe. raise_errors : bool If True, raises errors instead of returning a boolean False for invalid properties. Default False. df_view_col: Column from df used to associate interviews with view regions. Default `view_region`. view_name_col: Column from view_df with view region names. Default `name`. cols: (str, str, str) Column names for chrom, start, end in df. cols_view: (str, str, str) Column names for chrom, start, end in view_df. Returns ------- is_contained:bool """ from ..ops import trim ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols ck2, sk2, ek2 = _get_default_colnames() if cols_view is None else cols_view if df_view_col is None: try: df_view_assigned = ops.overlap(df, view_df, cols1=cols, cols2=cols_view) # ek2 = end_ is the default value assert (df_view_assigned[ek2 + "_"].isna()).sum() == 0 # sk2 = start_ is the default value assert (df_view_assigned[sk2 + "_"].isna()).sum() == 0 assert (df_view_assigned[ek1] <= df_view_assigned[ek2 + "_"]).all() # ek1 = end is the default value # sk1 = start is the default value assert (df_view_assigned[sk1] >= df_view_assigned[sk2 + "_"]).all() except AssertionError as e: if raise_errors: raise AssertionError("df not contained in view_df") from e else: return False return True if not is_cataloged( df, view_df, df_view_col=df_view_col, view_name_col=view_name_col ): if raise_errors: raise ValueError("df not cataloged in view_df") return False df_trim = trim( df, view_df=view_df, df_view_col=df_view_col, view_name_col=view_name_col, cols=cols, cols_view=cols_view, ) is_start_trimmed = np.any(df[sk1].values != df_trim[sk1].values) is_end_trimmed = np.any(df[ek1].values != df_trim[ek1].values) if is_start_trimmed or is_end_trimmed: if raise_errors: raise ValueError("df not contained in view_df") return False else: return True def is_covering(df, view_df, view_name_col="name", cols=None, cols_view=None): """ Tests if a view `view_df` is covered by the set of genomic intervals in the bedframe `df`. This test is true if ``complement(df,view_df)`` is empty. Also note this test ignores regions assigned to intervals in `df` since regions are re-assigned in :func:`bioframe.ops.complement`. Parameters ---------- df : pandas.DataFrame view_df : pandas.DataFrame Valid viewFrame. view_name_col: Column from view_df with view region names. Default `name`. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. cols_view: (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals in view_df, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- is_covering:bool """ from ..ops import complement if complement( df, view_df=view_df, view_name_col=view_name_col, cols=cols, cols_view=cols_view, ).empty: return True else: return False def is_tiling( df, view_df, raise_errors=False, df_view_col="view_region", view_name_col="name", cols=None, cols_view=None, ): """ Tests if a view `view_df` is tiled by the set of genomic intervals in the bedframe `df`. This is true if: - df is not overlapping - df is covering view_df - df is contained in view_df Parameters ---------- df : pandas.DataFrame view_df : pandas.DataFrame valid viewFrame raise_errors : bool If True, raises errors instead of returning a boolean False for invalid properties. Default False. df_view_col: str Name of column from df that indicates region in view. view_name_col: str Name of column from view that specifies unique region name. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. cols_view: (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals in view_df, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- is_tiling:bool """ view_df = construction.make_viewframe( view_df, view_name_col=view_name_col, cols=cols_view ) if is_overlapping(df, cols=cols): if raise_errors: raise ValueError("overlaps") return False if not is_covering( df, view_df, view_name_col=view_name_col, cols=cols, cols_view=cols_view ): if raise_errors: raise ValueError("not covered") return False if not is_contained( df, view_df, df_view_col=df_view_col, view_name_col=view_name_col, cols=cols, cols_view=cols_view, ): if raise_errors: raise ValueError("not contained") return False return True def is_sorted( df, view_df=None, reset_index=True, df_view_col=None, view_name_col="name", cols=None, cols_view=None, ): """ Tests if a bedframe is changed by sorting. Also see :func:`bioframe.ops.sort_bedframe`. Parameters ---------- df : pandas.DataFrame view_df : pandas.DataFrame | dict-like Optional view to pass to ``sort_bedframe``. When it is dict-like :func:'bioframe.make_viewframe' will be used to convert to viewframe. If view_df is not provided df is assumed to be sorted by chrom and start. reset_index : bool Optional argument to pass to ``sort_bedframe``. df_view_col: None | str Name of column from df that indicates region in view. If None, :func:'bioframe.assign_view' will be used to assign view regions. Default None. view_name_col: str Name of column from view that specifies unique region name. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. cols_view: (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals in view_df, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- is_sorted : bool """ from ..ops import sort_bedframe df_sorted = sort_bedframe( df.copy(), view_df=view_df, reset_index=reset_index, df_view_col=df_view_col, view_name_col=view_name_col, cols=cols, cols_view=cols_view, ) if df.equals(df_sorted): return True else: return False open2c-bioframe-4fe9b25/bioframe/core/construction.py000066400000000000000000000264331477525772300227570ustar00rootroot00000000000000import numpy as np import pandas as pd from . import checks from .specs import _get_default_colnames, _verify_columns, is_chrom_dtype from .stringops import is_complete_ucsc_string, parse_region_string, to_ucsc_string __all__ = [ "from_dict", "from_series", "from_list", "from_any", "make_viewframe", "sanitize_bedframe", ] ### conversions from various input formats into dataframes ### def from_dict(regions, cols=None): """ Makes a dataframe from a dictionary of {str,int} pairs, interpreted as chromosome names. Note that {str,(int,int)} dictionaries of tuples are no longer supported! Parameters ---------- regions : dict name_col : str Default 'name'. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- df : pandas.DataFrame """ ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols data = [] for k, v in dict(regions).items(): chrom = k if np.isscalar(v): start = 0 end = v else: raise ValueError("Unsupported dict format: {type(v)}") data.append([chrom, start, end]) return pd.DataFrame(data, columns=[ck1, sk1, ek1]) def from_series(regions, cols=None): ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols chroms = regions.index.values data = {ck1: chroms, sk1: 0, ek1: regions.values} return pd.DataFrame(data) def from_list(regions, name_col="name", cols=None): ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols df = pd.DataFrame(regions) if df.shape[1] == 3: df.columns = [ck1, sk1, ek1] elif df.shape[1] == 4: df.columns = [ck1, sk1, ek1, name_col] else: raise ValueError("wrong number of columns for list input format") return df def from_ucsc_string_list(region_list, cols=None): ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols parsed = [parse_region_string(i) for i in region_list] df = pd.DataFrame(parsed, columns=[ck1, sk1, ek1]) return df def from_any(regions, fill_null=False, name_col="name", cols=None): """ Attempts to make a genomic interval dataframe with columns [chr, start, end, name_col] from a variety of input types. Parameters ---------- regions : supported input Currently supported inputs: - dataframe - series of UCSC strings - dictionary of {str:int} key value pairs - pandas series where the index is interpreted as chromosomes and values are interpreted as end - list of tuples or lists, either [(chrom,start,end)] or [(chrom,start,end,name)] - tuple of tuples or lists, either [(chrom,start,end)] or [(chrom,start,end,name)] fill_null : False or dictionary Accepts a dictionary of {str:int} pairs, interpreted as chromosome sizes. Kept or backwards compatibility. Default False. name_col : str Column name. Only used if 4 column list is provided. Default "name". cols : (str,str,str) Names for dataframe columns. Default None sets them with get_default_colnames(). Returns ------- out_df:dataframe """ ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols if isinstance(regions, pd.DataFrame): if {ck1, sk1, ek1}.issubset(regions.columns): out_df = regions.copy() elif (len(regions[name_col].values.shape) == 1) and is_complete_ucsc_string( regions[name_col].values[0] ): out_df = from_ucsc_string_list( regions[name_col].values, cols=[ck1, sk1, ek1] ) else: raise ValueError("Unknown dataFrame format: check column names") elif isinstance(regions, dict): out_df = from_dict(regions, cols=[ck1, sk1, ek1]) elif isinstance(regions, pd.Series): out_df = from_series(regions, cols=[ck1, sk1, ek1]) elif isinstance(regions, tuple): if np.shape(regions) == (3,): out_df = from_list([regions], name_col=name_col, cols=[ck1, sk1, ek1]) elif len(np.shape(regions)) == 1 and isinstance(regions[0], str): out_df = from_ucsc_string_list(regions, cols=[ck1, sk1, ek1]) else: out_df = from_list(list(regions), name_col=name_col, cols=[ck1, sk1, ek1]) elif isinstance(regions, list): if np.shape(regions) == (3,): out_df = from_list([regions], name_col=name_col, cols=[ck1, sk1, ek1]) elif len(np.shape(regions)) == 1 and isinstance(regions[0], str): out_df = from_ucsc_string_list(regions, cols=[ck1, sk1, ek1]) else: out_df = from_list(regions, name_col=name_col, cols=[ck1, sk1, ek1]) else: raise ValueError(f"Unknown input format: {type(regions)}") if fill_null: out_df[sk1] = pd.to_numeric(out_df[sk1]).fillna(0) try: ends = [] for i in range(len(out_df)): if out_df[ek1].values[i] is None: ends.append(fill_null[out_df[ck1].values[i]]) else: ends.append(out_df[ek1].values[i]) out_df[ek1] = ends except Exception as e: raise ValueError("could not fill ends with provided chromsizes") from e return out_df def add_ucsc_name_column(reg_df, name_col="name", cols=None): """ Auto-creates a UCSC name 'chrom:start-end' for each region (chrom,start,end) in reg_df. Replaces name_col if it exists. """ ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols df = reg_df.copy() _verify_columns(df, [ck1, sk1, ek1]) data = zip(df[ck1], df[sk1], df[ek1]) df[name_col] = [to_ucsc_string(i) for i in data] return df def make_viewframe( regions, check_bounds=None, name_style=None, view_name_col="name", cols=None, ): """ Makes and validates a dataframe `view_df` out of regions. Parameters ---------- regions : supported input type Currently supported input types: - a dictionary where keys are strings and values are integers {str:int}, specifying regions (chrom, 0, end, chrom) - a pandas series of chromosomes lengths with index specifying region names - a list of tuples [(chrom,start,end), ...] or [(chrom,start,end,name), ...] - a pandas DataFrame, skips to validation step name_style : None or "ucsc" If None and no column view_name_col, propagate values from cols[0] If "ucsc" and no column view_name_col, create UCSC style names check_bounds : None, or chromosome sizes provided as any of valid formats above Optional, if provided checks if regions in the view are contained by regions supplied in check_bounds, typically provided as a series of chromosome sizes. Default None. view_name_col : str Specifies column name of the view regions. Default 'name'. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- view_df:dataframe satisfying properties of a view """ ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols view_df = from_any(regions, name_col=view_name_col, cols=cols) if check_bounds is not None: bounds_df = from_any(check_bounds, name_col="bounds", cols=cols) if not checks.is_contained( view_df, bounds_df, df_view_col=None, view_name_col="bounds", cols=cols, ): raise ValueError( "Invalid input to make a viewFrame, regions not contained by bounds" ) if view_name_col not in view_df.columns: if name_style is None: view_df[view_name_col] = view_df[ck1].values elif name_style.lower() == "ucsc": view_df = add_ucsc_name_column(view_df, name_col=view_name_col, cols=cols) else: raise ValueError("unknown value for name_style") if checks.is_viewframe( view_df, view_name_col=view_name_col, cols=cols, raise_errors=True ): return view_df else: raise ValueError("could not make valid viewFrame, retry with new input") def sanitize_bedframe( df1, recast_dtypes=True, drop_null=False, start_exceed_end_action=None, cols=None, ): """ Attempts to clean a genomic interval dataframe to be a valid bedframe. Parameters ---------- df1 : pandas.DataFrame recast_dtypes : bool Whether to attempt to recast column dtypes to pandas nullable dtypes. drop_null : bool Drops rows with pd.NA. Default False. start_exceed_end_action : str or None Options: 'flip' or 'drop' or None. Default None. - If 'flip', attempts to sanitize by flipping intervals with start>end. - If 'drop' attempts to sanitize dropping intervals with start>end. - If None, does not alter these intervals if present. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- out_df : pandas.DataFrame Sanitized dataframe satisfying the properties of a bedframe. Notes ------ The option ``start_exceed_end_action='flip'`` may be useful for gff files with strand information but starts > ends. """ ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols out_df = df1.copy() _verify_columns(out_df, [ck1, sk1, ek1]) if recast_dtypes: chrom_dtype, start_dtype, end_dtype = out_df.dtypes[[ck1, sk1, ek1]] if not is_chrom_dtype(chrom_dtype): out_df[ck1] = out_df[ck1].astype(str) if not ((start_dtype is pd.Int64Dtype()) and (end_dtype is pd.Int64Dtype())): out_df[sk1] = out_df[sk1].astype(pd.Int64Dtype()) out_df[ek1] = out_df[ek1].astype(pd.Int64Dtype()) nan_intervals = pd.isnull(out_df[[ck1, sk1, ek1]]).any(axis=1) out_df.loc[nan_intervals, [ck1, sk1, ek1]] = pd.NA if drop_null: out_df.dropna(axis=0, inplace=True) out_df.reset_index(drop=True, inplace=True) if start_exceed_end_action is not None: start_exceed_end_action = start_exceed_end_action.lower() if ((out_df[ek1] - out_df[sk1]) < 0).any(): inds = ((out_df[ek1] - out_df[sk1]) < 0).values if start_exceed_end_action == "drop": out_df = out_df.loc[inds == 0] elif start_exceed_end_action == "flip": out_df.loc[inds, [sk1, ek1]] = out_df.loc[inds, [ek1, sk1]].values else: raise ValueError("unknown action for intervals with start>end") out_df.reset_index(drop=True, inplace=True) if checks.is_bedframe(out_df, cols=cols): return out_df else: raise ValueError("could not sanitize") open2c-bioframe-4fe9b25/bioframe/core/specs.py000066400000000000000000000105071477525772300213350ustar00rootroot00000000000000import collections import numpy as np import pandas as pd __all__ = [ "update_default_colnames", "is_chrom_dtype", ] _rc = {"colnames": {"chrom": "chrom", "start": "start", "end": "end"}} def _get_default_colnames(): """ Returns default column names. These defaults be updated with :func:`update_default_colnames`. Returns ------- colnames : triplet (str, str, str) """ return _rc["colnames"]["chrom"], _rc["colnames"]["start"], _rc["colnames"]["end"] class update_default_colnames: def __init__(self, new_colnames): self._old_colnames = dict(_rc["colnames"]) if isinstance(new_colnames, collections.abc.Iterable): if len(new_colnames) != 3: raise ValueError( "Please, specify new columns using a list of " "3 strings or a dict!" ) ( _rc["colnames"]["chrom"], _rc["colnames"]["start"], _rc["colnames"]["end"], ) = new_colnames elif isinstance(new_colnames, collections.abc.Mapping): _rc["colnames"].update( { k: v for k, v in new_colnames.items() if k in ["chrom", "start", "end"] } ) else: raise ValueError( "Please, specify new columns using a list of " "3 strings or a dict!" ) def __enter__(self): return self def __exit__(self, *args): _rc["colnames"] = self._old_colnames def _verify_columns(df, colnames, unique_cols=False, return_as_bool=False): """ Raises ValueError if columns with colnames are not present in dataframe df. Parameters ---------- df: pandas.DataFrame colnames: list of column names return_as_bool : bool If True, returns as a boolean instead of raising errors. Default False. """ if not isinstance(df, pd.DataFrame): if return_as_bool: return False raise ValueError("df is not a dataframe") if unique_cols: if len(set(colnames)) < len(colnames): raise ValueError("column names must be unique") if not set(colnames).issubset(df.columns): if return_as_bool: return False raise ValueError( ", ".join(set(colnames).difference(set(df.columns))) + " not in keys of df.columns" ) if return_as_bool: return True def _verify_column_dtypes(df, cols=None, return_as_bool=False): """ Checks that dataframe `df` has chrom, start, end columns with valid dtypes. Raises TypeErrors if cols have invalid dtypes. Parameters ---------- df : pandas.DataFrame cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. return_as_bool : bool If true, returns as a boolean instead of raising errors. Default False. """ ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols if not _verify_columns(df, [ck1, sk1, ek1], return_as_bool=True): if return_as_bool: return False raise ValueError("could not verify columns") chrom_dtype, start_dtype, end_dtype = df.dtypes[[ck1, sk1, ek1]] if not is_chrom_dtype(chrom_dtype): if return_as_bool: return False raise TypeError( "invalid df['chrom'] dtype, must be object, string, or categorical" ) if not pd.api.types.is_integer_dtype(start_dtype): if return_as_bool: return False raise TypeError("invalid df['start'] dtype, must be integer") if not pd.api.types.is_integer_dtype(end_dtype): if return_as_bool: return False raise TypeError("invalid df['end'] dtype, must be integer") if return_as_bool: return True def is_chrom_dtype(chrom_dtype): """ Returns True if dtype is any of the allowed bioframe chrom dtypes, False otherwise. """ return np.any( [ pd.api.types.is_string_dtype(chrom_dtype), pd.api.types.is_object_dtype(chrom_dtype), isinstance(chrom_dtype, pd.api.types.CategoricalDtype), ] ) open2c-bioframe-4fe9b25/bioframe/core/stringops.py000066400000000000000000000154061477525772300222530ustar00rootroot00000000000000import re from typing import Optional, Tuple, Union import pandas as pd __all__ = [ "parse_region", "parse_region_string", "is_complete_ucsc_string", "to_ucsc_string", ] NUMERIC_REGEX = re.compile("([0-9,.]+)") RANGE_TOKEN_SPEC = [ ("HYPHEN", r"-"), ("COORD", r"[0-9,]+(\.[0-9]*)?(?:[a-z]+)?"), ("OTHER", r".+"), ] RANGE_REGEX = re.compile( r"\s*" + r"|\s*".join(rf"(?P<{name}>{token})" for name, token in RANGE_TOKEN_SPEC), re.IGNORECASE, ) def to_ucsc_string(grange: Tuple[str, int, int]) -> str: """ Convert a grange to a UCSC string. Parameters ---------- grange : tuple or other iterable chrom, start, end Returns ------- str UCSC-style genomic range string, '{chrom}:{start}-{end}' """ return "{}:{}-{}".format(*grange) def is_complete_ucsc_string(s: str) -> bool: """ Returns True if a string can be parsed into a completely informative (chrom, start, end) format. Parameters ---------- s : str Returns ------- bool True if able to be parsed and ``end`` is known. """ if not isinstance(s, str): return False _, _, end = parse_region_string(s) if end is None: return False return True def _parse_humanized_int(s: str) -> int: _, value, unit = NUMERIC_REGEX.split(s.replace(",", "")) # No multiplier unit, just return the integer value if not len(unit): return int(value) # Parse and apply the multiplier. Remaining decimal places are dropped. value = float(value) unit = unit.upper().strip() if unit in ("K", "KB"): value *= 1_000 elif unit in ("M", "MB"): value *= 1_000_000 elif unit in ("G", "GB"): value *= 1_000_000_000 else: raise ValueError(f"Unknown unit '{unit}'") return int(value) def parse_region_string(s: str) -> Tuple[str, int, int]: """ Parse a UCSC-style genomic range string into a triple. Parameters ---------- s : str UCSC-style genomic range string, e.g. "chr5:10,100,000-30,000,000". Returns ------- tuple (str, int or None, int or None) See also -------- parse_region """ def _tokenize(s): for match in RANGE_REGEX.finditer(s): name = match.lastgroup yield name, match.group(name) def _parse_range(token_stream): name, token = next(token_stream, (None, None)) if name != "COORD": raise ValueError(f"Expected COORD; got unexpected token: {name}: {token}") start = _parse_humanized_int(token) name, token = next(token_stream, (None, None)) if name != "HYPHEN": raise ValueError(f"Expected HYPHEN; got unexpected token: {name}: {token}") name, token = next(token_stream, (None, None)) if name is None: # No end coordinate end = None elif name == "COORD": end = _parse_humanized_int(token) else: raise ValueError(f"Expected COORD; got unexpected token: {name}: {token}") return start, end parts = s.split(":") chrom = parts[0].strip() if not len(chrom): raise ValueError("Chromosome name cannot be empty") if len(parts) < 2: return (chrom, None, None) start, end = _parse_range(_tokenize(parts[1])) return chrom, start, end def _parse_region_record(grange: tuple) -> Tuple[str, int, int]: """ Coerce a genomic range record into a triple. Parameters ---------- grange : str or tuple * A triple (chrom, start, end), where ``start`` or ``end`` may be ``None``. * A quadruple or higher-order tuple, e.g. (chrom, start, end, name). ``name`` and other fields will be ignored. Returns ------- tuple A well-formed genomic range triple (str, int, int). """ if len(grange) < 3: raise ValueError("Length of a range record should be at least 3") chrom, start, end = grange[:3] chrom = str(chrom) start = int(start) if start is not None else start end = int(end) if end is not None else end return chrom, start, end def parse_region( grange: Union[str, tuple], chromsizes: Optional[Union[dict, pd.Series]] = None, *, check_bounds: bool = True, ) -> Tuple[str, int, int]: """ Coerce a genomic range string or sequence type into a triple. Parameters ---------- grange : str or tuple * A UCSC-style genomic range string, e.g. "chr5:10,100,000-30,000,000". * A triple (chrom, start, end), where ``start`` or ``end`` may be ``None``. * A quadruple or higher-order tuple, e.g. (chrom, start, end, name). ``name`` and other fields will be ignored. chromsizes : dict or Series, optional Lookup table of sequence lengths for bounds checking and for filling in a missing end coordinate. check_bounds : bool, optional [default: True] If True, check that the genomic range is within the bounds of the sequence. Returns ------- tuple A well-formed genomic range triple (str, int, int). Notes ----- Genomic ranges are interpreted as half-open intervals (0-based starts, 1-based ends) along the length coordinate of a sequence. Sequence names may contain any character except for whitespace and colon. The start coordinate should be 0 or greater and the end coordinate should be less than or equal to the length of the sequence, if the latter is known. These are enforced when ``check_bounds`` is ``True``. If the start coordinate is missing, it is assumed to be 0. If the end coordinate is missing and chromsizes are provided, it is replaced with the length of the sequence. The end coordinate **must** be greater than or equal to the start. The start and end coordinates may be suffixed with k(b), M(b), or G(b) multipliers, case-insentive. e.g. "chr1:1K-2M" is equivalent to "chr1:1000-2000000". """ if isinstance(grange, str): chrom, start, end = parse_region_string(grange) else: chrom, start, end = _parse_region_record(grange) # Fill in missing end coordinate if possible clen = None if chromsizes is not None: try: clen = chromsizes[chrom] except KeyError as e: raise ValueError(f"Unknown sequence label: {chrom}") from e if end is None: end = clen # Fill in missing start coordinate if start is None: start = 0 if end is not None and (end < start): raise ValueError("End cannot be less than start") if check_bounds and (start < 0 or (clen is not None and end > clen)): raise ValueError(f"Genomic range out of bounds: [{start}, {end})") return chrom, start, end open2c-bioframe-4fe9b25/bioframe/extras.py000066400000000000000000000531211477525772300205750ustar00rootroot00000000000000from __future__ import annotations import numpy as np import pandas as pd from . import ops from .core.specs import _get_default_colnames, _verify_columns __all__ = [ "make_chromarms", "binnify", "digest", "frac_mapped", "frac_gc", "seq_gc", "frac_gene_coverage", "pair_by_distance", "mark_runs", "merge_runs" ] def make_chromarms( chromsizes, midpoints, cols_chroms=("chrom", "length"), cols_mids=("chrom", "mid"), suffixes=("_p", "_q"), ): """ Split chromosomes into chromosome arms. Parameters ---------- chromsizes : pandas.Dataframe or dict-like If dict or pandas.Series, a map from chromosomes to lengths in bp. If pandas.Dataframe, a dataframe with columns defined by cols_chroms. If cols_chroms is a triplet (e.g. 'chrom','start','end'), then values in chromsizes[cols_chroms[1]].values must all be zero. midpoints : pandas.Dataframe or dict-like Mapping of chromosomes to midpoint (aka centromere) locations. If dict or pandas.Series, a map from chromosomes to midpoints in bp. If pandas.Dataframe, a dataframe with columns defined by cols_mids. cols_chroms : (str, str) or (str, str, str) Two columns suffixes : tuple, optional Suffixes to name chromosome arms. Defaults to p and q. Returns ------- df_chromarms 4-column BED-like DataFrame (chrom, start, end, name). Arm names are chromosome names + suffix. Any chromosome not included in ``mids`` will be not be split. """ columns_to_drop = ["index", "sub_index_"] if len(cols_chroms) == 2: ck1, sk1 = cols_chroms elif len(cols_chroms) == 3: ck1, sk1, ek1 = cols_chroms if isinstance(chromsizes, (pd.Series, dict)): chromsizes = dict(chromsizes) df_chroms = pd.DataFrame( { ck1: list(chromsizes.keys()), "length": list(chromsizes.values()), } ) elif isinstance(chromsizes, pd.DataFrame): df_chroms = chromsizes.copy() else: raise ValueError("unknown input type for chromsizes") if len(cols_chroms) == 2: _verify_columns(df_chroms, [ck1, sk1]) columns_to_drop += [sk1] df_chroms["end"] = df_chroms[sk1].values df_chroms["start"] = 0 sk1, ek1 = "start", "end" elif len(cols_chroms) == 3: ck1, sk1, ek1 = cols_chroms _verify_columns(df_chroms, [ck1, sk1, ek1], unique_cols=True) if any(df_chroms[sk1].values != 0): raise ValueError("all values in starts column must be zero") else: raise ValueError("invalid number of cols_chroms") ck2, sk2 = cols_mids if isinstance(midpoints, (pd.Series, dict)): midpoints = dict(midpoints) df_mids = pd.DataFrame.from_dict(midpoints, orient="index", columns=[sk2]) df_mids.reset_index(inplace=True) df_mids.rename(columns={"index": ck2}, inplace=True) elif isinstance(midpoints, pd.DataFrame): df_mids = midpoints.copy() else: raise ValueError("unknown input type for midpoints") _verify_columns(df_mids, [ck2, sk2]) df_mids["start"] = df_mids[sk2] df_mids["end"] = df_mids[sk2] df_chromarms = ops.subtract( df_chroms, df_mids, cols1=(ck1, sk1, ek1), cols2=(ck2, "start", "end"), return_index=True, ) if df_chromarms["sub_index_"].max() > 1: raise ValueError( "chromosome split into more than two arms, double-check midpoints" ) df_chromarms["name"] = df_chromarms[ck1] + [ suffixes[i] for i in df_chromarms["sub_index_"].values ] # df_chromarms.drop(columns=columns_to_drop, inplace=True) return df_chromarms[[ck1, sk1, ek1, "name"]] def binnify(chromsizes, binsize, rel_ids=False): """ Divide a genome into evenly sized bins. Parameters ---------- chromsizes : Series pandas Series indexed by chromosome name with chromosome lengths in bp. binsize : int size of bins in bp Returns ------- bintable : pandas.DataFrame with columns: 'chrom', 'start', 'end'. """ if not isinstance(binsize, int): raise ValueError("binsize must be int") def _each(chrom): clen = chromsizes[chrom] n_bins = int(np.ceil(clen / binsize)) binedges = np.arange(0, (n_bins + 1)) * binsize binedges[-1] = clen return pd.DataFrame( {"chrom": [chrom] * n_bins, "start": binedges[:-1], "end": binedges[1:]}, columns=["chrom", "start", "end"], ) bintable = pd.concat(map(_each, chromsizes.keys()), axis=0, ignore_index=True) if rel_ids: bintable["rel_id"] = bintable.groupby("chrom").cumcount() # if as_cat: # bintable['chrom'] = pd.Categorical( # bintable['chrom'], # categories=list(chromsizes.keys()), # ordered=True) return bintable def digest(fasta_records, enzyme): """ Divide a genome into restriction fragments. Parameters ---------- fasta_records : OrderedDict Dictionary of chromosome names to sequence records. Created by: bioframe.load_fasta('/path/to/fasta.fa') enzyme: str Name of restriction enzyme. Returns ------- Dataframe with columns: 'chrom', 'start', 'end'. """ try: import Bio.Restriction as biorst import Bio.Seq as bioseq except ImportError: raise ImportError("Biopython is required to use digest") from None # http://biopython.org/DIST/docs/cookbook/Restriction.html#mozTocId447698 if not isinstance(fasta_records, dict): raise ValueError( "fasta records must be provided as an OrderedDict, can be created " "by bioframe.load_fasta" ) chroms = fasta_records.keys() try: cut_finder = getattr(biorst, enzyme).search except AttributeError as e: raise ValueError(f"Unknown enzyme name: {enzyme}") from e def _each(chrom): seq = bioseq.Seq(str(fasta_records[chrom][:])) cuts = np.r_[0, np.array(cut_finder(seq)) + 1, len(seq)].astype(np.int64) n_frags = len(cuts) - 1 frags = pd.DataFrame( {"chrom": [chrom] * n_frags, "start": cuts[:-1], "end": cuts[1:]}, columns=["chrom", "start", "end"], ) return frags return pd.concat(map(_each, chroms), axis=0, ignore_index=True) def frac_mapped(df, fasta_records, return_input=True): """ Calculate the fraction of mapped base-pairs for each interval in a dataframe. Parameters ---------- df : pandas.DataFrame A sets of genomic intervals stored as a DataFrame. fasta_records : OrderedDict Dictionary of chromosome names to sequence records. Created by: bioframe.load_fasta('/path/to/fasta.fa') return_input: bool if False, only return Series named frac_mapped. Returns ------- df_mapped : pd.DataFrame Original dataframe with new column 'frac_mapped' appended. """ if not set(df["chrom"].values).issubset(set(fasta_records.keys())): raise ValueError( "chrom from intervals not in fasta_records: " "double-check genome agreement" ) if not isinstance(fasta_records, dict): raise ValueError( "fasta records must be provided as an OrderedDict, can be created " "by bioframe.load_fasta" ) def _each(bin): s = str(fasta_records[bin.chrom][bin.start : bin.end]) nbases = len(s) n = s.count("N") n += s.count("n") return (nbases - n) / nbases if nbases > 0 else 0 if return_input: return pd.concat( [df, df.apply(_each, axis=1).rename("frac_mapped", inplace=True)], axis="columns", ) else: return df.apply(_each, axis=1).rename("frac_mapped", inplace=True) def frac_gc(df, fasta_records, mapped_only=True, return_input=True): """ Calculate the fraction of GC basepairs for each interval in a dataframe. Parameters ---------- df : pandas.DataFrame A sets of genomic intervals stored as a DataFrame. fasta_records : OrderedDict Dictionary of chromosome names to sequence records. Created by: bioframe.load_fasta('/path/to/fasta.fa') mapped_only: bool if True, ignore 'N' in the fasta_records for calculation. if True and there are no mapped base-pairs in an interval, return np.nan. return_input: bool if False, only return Series named frac_mapped. Returns ------- df_mapped : pd.DataFrame Original dataframe with new column 'GC' appended. """ if not set(df["chrom"].values).issubset(set(fasta_records.keys())): raise ValueError( "chrom from intervals not in fasta_records: double-check genome agreement" ) if not isinstance(fasta_records, dict): raise ValueError( "fasta records must be provided as an OrderedDict, can be created " "by bioframe.load_fasta" ) def _each(chrom_group): chrom = chrom_group.name seq = fasta_records[chrom] seq = str(seq[:]) gc = [] for _, bin in chrom_group.iterrows(): s = seq[bin["start"] : bin["end"]] gc.append(seq_gc(s, mapped_only=mapped_only)) return gc agg = df.groupby("chrom", sort=False)[["start", "end"]].apply(_each) out_col = pd.Series(data=np.concatenate(agg.values), index=df.index).rename("GC") if return_input: return pd.concat([df, out_col], axis="columns") else: return out_col def seq_gc(seq, mapped_only=True): """ Calculate the fraction of GC basepairs for a string of nucleotides. Parameters ---------- seq : str Basepair input mapped_only: bool if True, ignore 'N' in the sequence for calculation. if True and there are no mapped base-pairs, return np.nan. Returns ------- gc : float calculated gc content. """ if not isinstance(seq, str): raise ValueError("reformat input sequence as a str") g = seq.count("G") g += seq.count("g") c = seq.count("C") c += seq.count("c") nbases = len(seq) if mapped_only: n = seq.count("N") n += seq.count("n") nbases -= n return (g + c) / nbases if nbases > 0 else np.nan def frac_gene_coverage(df, ucsc_mrna): """ Calculate number and fraction of overlaps by predicted and verified RNA isoforms for a set of intervals stored in a dataframe. Parameters ---------- df : pd.DataFrame Set of genomic intervals stored as a dataframe. ucsc_mrna: str or DataFrame Name of UCSC genome or all_mrna.txt dataframe from UCSC or similar. Returns ------- df_gene_coverage : pd.DataFrame """ if isinstance(ucsc_mrna, str): from .io.resources import UCSCClient mrna = UCSCClient(ucsc_mrna).fetch_mrna() else: mrna = ucsc_mrna mrna = mrna.rename(columns={"tName": "chrom", "tStart": "start", "tEnd": "end"}) df_gene_coverage = ops.coverage(df, mrna) df_gene_coverage = ops.count_overlaps(df_gene_coverage, mrna) return df_gene_coverage def pair_by_distance( df, min_sep, max_sep, min_intervening=None, max_intervening=None, relative_to="midpoints", cols=None, return_index=False, keep_order=False, suffixes=("_1", "_2"), ): """ From a dataframe of genomic intervals, find all unique pairs of intervals that are between ``min_sep`` and ``max_sep`` bp separated from each other. Parameters ---------- df : pandas.DataFrame A BED-like dataframe. min_sep, max_sep : int Minimum and maximum separation between intervals in bp. Min > 0 and Max >= Min. min_intervening, max_intervening : int Minimum and maximum number of intervening intervals separating pairs. Min > 0 and Max >= Min. relative_to : str, Whether to calculate distances between interval "midpoints" or "endpoints". Default "midpoints". cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. return_index : bool If True, return indicies of pairs as two new columns ('index'+suffixes[0] and 'index'+suffixes[1]). Default False. keep_order : bool, optional If True, sort the output dataframe to preserve the order of the intervals in df1. Default False. Note that it relies on sorting of index in the original dataframes, and will reorder the output by index. suffixes : (str, str), optional The column name suffixes for the two interval sets in the output. The first interval of each output pair is always upstream of the second. Returns ------- pandas.DataFrame A BEDPE-like dataframe of paired intervals from ``df``. """ # Create the copy of original dataset: df = df.copy() # Index column name index_col = return_index if isinstance(return_index, str) else "index" index_col_1 = index_col + suffixes[0] index_col_2 = index_col + suffixes[1] if return_index or keep_order: df.index.name = index_col # Get columns for pairing ck, sk, ek = _get_default_colnames() if cols is None else cols # Sort intervals by genomic coordinates df = df.sort_values([ck, sk, ek]).reset_index(drop=False) if min_sep >= max_sep: raise ValueError("min_sep must be less than max_sep") if min_sep < 0: raise ValueError("min_sep must be >=0") if min_intervening is None: min_intervening = 0 if max_intervening is None: max_intervening = df.index.max() if min_intervening > max_intervening: raise ValueError("min_intervening must be less or equal to max_intervening") if min_intervening < 0: raise ValueError("min_intervening must be >=0") mids = (df[sk] + df[ek]) // 2 # For each interval, generate a probe interval on its right if relative_to == "endpoints": print("endpoint") ref = df[ek] elif relative_to == "midpoints": ref = mids else: raise ValueError("relative_to must either specify 'midpoints' or 'endpoints' ") right_probe = ( df[[ck, index_col]].copy() if (return_index or keep_order) else df[[ck]].copy() ) right_probe[sk] = ref + min_sep // 2 right_probe[ek] = ref + (max_sep + 1) // 2 # For each interval, also generate a probe interval on its left if relative_to == "endpoints": ref = df[sk] elif relative_to == "midpoints": ref = mids else: raise ValueError("relative_to must either specify 'midpoints' or 'endpoints' ") left_probe = ( df[[ck, index_col]].copy() if (return_index or keep_order) else df[[ck]].copy() ) left_probe[sk] = ref - max_sep // 2 left_probe[ek] = ref - (min_sep + 1) // 2 # Intersect right-handed probes (from intervals on the left) # with left-handed probes (from intervals on the right) idxs = ops.overlap( right_probe, left_probe, suffixes=suffixes, how="inner", return_index=True, return_input=False, ) # Select only the pairs that are separated by # at least min_intervening intervals and no more than max_intervening intervals idxs["intervening"] = ( np.abs(idxs[f"index{suffixes[0]}"] - idxs[f"index{suffixes[1]}"]) - 1 ) idxs = idxs[ (idxs["intervening"] <= max_intervening) & (idxs["intervening"] >= min_intervening) ] left_ivals = ( df.iloc[idxs[f"index{suffixes[0]}"].values] .rename(columns=lambda x: x + suffixes[0]) .reset_index(drop=True) ) right_ivals = ( df.iloc[idxs[f"index{suffixes[1]}"].values] .rename(columns=lambda x: x + suffixes[1]) .reset_index(drop=True) ) out_df = pd.concat([left_ivals, right_ivals], axis=1) if keep_order: out_df = out_df.sort_values([index_col_1, index_col_2]) if not return_index: out_df = out_df.drop([index_col_1, index_col_2], axis=1) out_df.reset_index(drop=True, inplace=True) return out_df def mark_runs( df: pd.DataFrame, col: str, *, allow_overlaps: bool = False, reset_counter: bool = True, run_col: str = 'run', cols: tuple[str, str, str] | None = None, ) -> pd.DataFrame: """ Mark runs of spatially consecutive intervals sharing the same value of ``col``. Parameters ---------- df : DataFrame A bioframe dataframe. col : str The column to mark runs of values for. allow_overlaps : bool, optional [default: False] If True, allow intervals in ``df`` to overlap. This may cause unexpected results. reset_counter : bool, optional [default: True] If True, reset the run counter for each chromosome. run_col : str, optional [default: 'run'] The name of the column to store the run numbers in. Returns ------- pandas.DataFrame A reordered copy the input dataframe with an additional column 'run' marking runs of values in the input column. Notes ----- This is similar to :func:`cluster`, but only clusters intervals sharing the same value of ``col``. Examples -------- >>> df = pd.DataFrame({ ... 'chrom': ['chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1'], ... 'start': [0, 100, 200, 300, 400, 500], ... 'end': [100, 200, 300, 400, 500, 600], ... 'value': [1, 1, 1, 2, 2, 2], ... }) >>> mark_runs(df, 'value') chrom start end value run 0 chr1 0 100 1 0 1 chr1 100 200 1 0 2 chr1 200 300 1 0 3 chr1 300 400 2 1 4 chr1 400 500 2 1 5 chr1 500 600 2 1 See Also -------- merge_runs cluster merge """ ck, sk, ek = _get_default_colnames() if cols is None else cols if not allow_overlaps and len(ops.overlap(df, df)) > len(df): raise ValueError("Not a proper bedGraph: found overlapping intervals.") result = [] n_runs = 0 for _, group in df.groupby(ck, sort=False): group = group.sort_values([sk, ek]) starts = group[sk].to_numpy() ends = group[ek].to_numpy() # Extend ends by running max ends = np.maximum.accumulate(ends) # Find borders of interval clusters and assign cluster ids is_cluster_border = np.r_[True, starts[1:] > ends[:-1], False] # Find borders of consecutive equal values values = group[col].to_numpy() if values.dtype.kind == 'f': is_value_border = np.r_[ True, ~np.isclose(values[1:], values[:-1], equal_nan=True), False ] else: is_value_border = np.r_[True, values[1:] != values[:-1], False] # Find index extents of runs is_border = is_cluster_border | is_value_border sum_borders = np.cumsum(is_border) run_ids = sum_borders[:-1] - 1 # Assign run numbers to intervals if reset_counter: n_runs = 0 group[run_col] = n_runs + run_ids n_runs += sum_borders[-1] result.append(group) return pd.concat(result) def merge_runs( df: pd.DataFrame, col: str, *, allow_overlaps: bool = False, agg: dict | None = None, cols: tuple[str, str, str] | None = None, ) -> pd.DataFrame: """ Merge runs of spatially consecutive intervals sharing the same value of ``col``. Parameters ---------- df : DataFrame A bioframe dataframe. col : str The column to compress runs of values for. allow_overlaps : bool, optional [default: False] If True, allow intervals in ``df`` to overlap. This may cause unexpected results. agg : dict, optional [default: None] A dictionary of additional column names and aggregation functions to apply to each run. Takes the format: {'agg_name': ('column_name', 'agg_func')} Returns ------- pandas.DataFrame Dataframe with consecutive intervals in the same run merged. Notes ----- This is similar to :func:`merge`, but only merges intervals sharing the same value of ``col``. Examples -------- >>> df = pd.DataFrame({ ... 'chrom': ['chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1'], ... 'start': [0, 100, 200, 300, 400, 500], ... 'end': [100, 200, 300, 400, 500, 600], ... 'value': [1, 1, 1, 2, 2, 2], ... }) >>> merge_runs(df, 'value') chrom start end value 0 chr1 0 300 1 1 chr1 300 600 2 >>> merge_runs(df, 'value', agg={'sum': ('value', 'sum')}) chrom start end value sum 0 chr1 0 300 1 3 1 chr1 300 600 2 6 See Also -------- mark_runs cluster merge """ ck, sk, ek = _get_default_colnames() if cols is None else cols if agg is None: agg = {} df_runs = mark_runs( df, col, allow_overlaps=allow_overlaps, reset_counter=False, run_col='_run', ) df_merged = ( df_runs .groupby('_run') .agg(**{ ck: (ck, 'first'), sk: (sk, 'min'), ek: (ek, 'max'), col: (col, 'first'), **agg }) ) return df_merged.reset_index(drop=True) open2c-bioframe-4fe9b25/bioframe/io/000077500000000000000000000000001477525772300173225ustar00rootroot00000000000000open2c-bioframe-4fe9b25/bioframe/io/__init__.py000066400000000000000000000013671477525772300214420ustar00rootroot00000000000000from .assembly import assemblies_available, assembly_info from .bed import to_bed from .fileops import ( load_fasta, read_alignments, read_bam, read_bigbed, read_bigwig, read_chromsizes, read_pairix, read_tabix, read_table, to_bigbed, to_bigwig, ) from .resources import UCSCClient, fetch_centromeres, fetch_chromsizes from .schemas import SCHEMAS __all__ = [ "assemblies_available", "assembly_info", "read_table", "read_chromsizes", "read_tabix", "read_pairix", "read_bam", "read_alignments", "load_fasta", "read_bigwig", "to_bed", "to_bigwig", "read_bigbed", "to_bigbed", "UCSCClient", "fetch_centromeres", "fetch_chromsizes", "SCHEMAS", ] open2c-bioframe-4fe9b25/bioframe/io/assembly.py000066400000000000000000000130431477525772300215140ustar00rootroot00000000000000from dataclasses import dataclass try: from importlib.resources import files as resource_path except ImportError: from importlib_resources import files as resource_path from typing import Dict, List, Optional, Tuple, Union try: from typing import Literal except ImportError: from typing_extensions import Literal import numpy as np import pandas as pd import yaml from bioframe import make_viewframe __all__ = ["assemblies_available", "assembly_info"] ASSEMBLY_METADATA_ROOT = resource_path("bioframe.io") / "data" @dataclass class GenomeAssembly: """ A dataclass containing information about sequences in a genome assembly. """ organism: str provider: str provider_build: str release_year: str seqinfo: pd.DataFrame cytobands: pd.DataFrame = None url: str = None alias_dict: Dict[str, str] = None def __post_init__(self): self.alias_dict = {} alias_lists = self.seqinfo["aliases"].str.split(",") names = self.seqinfo["name"] for aliases, name in zip(alias_lists, names): for alias in aliases: self.alias_dict[alias] = name @property def chromsizes(self) -> pd.Series: return self.seqinfo.set_index("name")["length"] @property def chromnames(self) -> List[str]: return self.seqinfo["name"].tolist() @property def viewframe(self) -> pd.DataFrame: return make_viewframe(self.chromsizes.to_dict()) def __repr__(self) -> str: return ( f"GenomeAssembly(organism='{self.organism}', provider='{self.provider}', " f"provider_build='{self.provider_build}', " f"release_year='{self.release_year}', ...)" ) def assemblies_available() -> pd.DataFrame: """ Get a list of available genome assembly metadata in local storage. Returns ------- pandas.DataFrame A dataframe with metadata fields for available assemblies, including 'provider', 'provider_build', 'default_roles', 'default_units', and names of seqinfo and cytoband files. """ with open(ASSEMBLY_METADATA_ROOT / "_assemblies.yml") as f: assemblies = yaml.safe_load(f) return pd.DataFrame.from_records(assemblies) def assembly_info( name: str, roles: Optional[Union[List, Tuple, Literal["all"]]] = None, units: Optional[Union[List, Tuple, Literal["all"]]] = None, ) -> GenomeAssembly: """ Get information about a genome assembly. Parameters ---------- name : str Name of the assembly. If the name contains a dot, it is interpreted as a provider name and a build, e.g. "hg38". Otherwise, the provider is inferred if the build name is unique. roles : list or tuple or "all", optional Sequence roles to include in the assembly info. If not specified, only sequences with the default sequence roles for the assembly are shown. e.g. "assembled", "unlocalized", "unplaced" units : list or tuple or "all", optional Assembly units to include in the assembly info. If not specified, only sequences from the default units for the assembly are shown. e.g. "primary", "non-nuclear", "decoy" Returns ------- GenomeAssembly A dataclass containing information about the assembly. Raises ------ ValueError If the assembly name is not found or is not unique. Examples -------- >>> hg38 = assembly_info("hg38") >>> hg38.chromsizes name chr1 248956422 chr2 242193529 chr3 198295559 ... ... >>> assembly_info("hg38", roles=("assembled", "non-nuclear")) >>> assembly_info("ucsc.hg38", units=("unplaced",)) """ assemblies = assemblies_available() provider = None if "." in name: provider, name = name.split(".", 1) provider = provider.lower() if provider is None: q = f"provider_build == '{name}'" else: q = f"provider == '{provider}' and provider_build == '{name}'" result = assemblies.query(q) if len(result) == 0: raise ValueError(f"Assembly not found: {name}") elif len(result) > 1: raise ValueError(f"Assembly identifer not unique: {result}") assembly = result.iloc[0].replace([np.nan], [None]).to_dict() default_roles = assembly["default_roles"] default_units = assembly["default_units"] seqinfo_path = assembly["seqinfo"] seqinfo = pd.read_table(ASSEMBLY_METADATA_ROOT / seqinfo_path) mask = np.ones(len(seqinfo), dtype=bool) if roles is None: mask &= seqinfo["role"].isin(default_roles) elif isinstance(roles, (tuple, list)): mask &= seqinfo["role"].isin(roles) elif isinstance(roles, str) and roles != "all": raise ValueError(f"roles must be a tuple or 'all', not {roles}") if units is None: mask &= seqinfo["unit"].isin(default_units) elif isinstance(units, (tuple, list)): mask &= seqinfo["unit"].isin(units) elif isinstance(units, str) and units != "all": raise ValueError(f"units must be a tuple or 'all', not {units}") seqinfo = seqinfo.loc[mask] cytobands = None cytobands_path = assembly["cytobands"] if cytobands_path is not None: cytobands = pd.read_table(ASSEMBLY_METADATA_ROOT / cytobands_path) return GenomeAssembly( organism=assembly["organism"], provider=assembly["provider"], provider_build=assembly["provider_build"], release_year=assembly["release_year"], seqinfo=seqinfo, cytobands=cytobands, url=assembly["url"], ) open2c-bioframe-4fe9b25/bioframe/io/bed.py000066400000000000000000000566301477525772300204400ustar00rootroot00000000000000"""Validate a BED dataframe against the BED specification. The BED specification is defined here: https://github.com/samtools/hts-specs/blob/master/BEDv1.pdf Some facts ---------- * Intervals are 0-based, half-open * Fields use 7-bit printable ASCII, including spaces but excluding tabs, newlines and other control characters * Flavors: BED{3,4,5,6,7,8,9,12}+m: m corresponds to custom fields, you can also do BEDn+ for an unspecified number of custom fields * First 3 fields are mandatory, last 9 are optional * BED10 and BED11 are illegal * Order is "binding": if an optional field is filled then all previous ones must also be filled * Standard BED fields can never be empty - must use a special null or "uninformative" placeholder value * Custom BED fields can be empty when a single tab is used as delimiter Delimiters ---------- While the BED spec allows for the use of either spaces or tabs as delimiters, even permitting a mixture in the same file, we do not validate any of the whitespace constraints imposed on fields in the spec to deal with the possibility of either space or mixed whitespace delimiters in the file. We assume that the dataframe will be written using a single tab as the sole delimiter, as recommended. Information we are agnostic to: - The delimiter used in the file before it was parsed: we work with files that have already been parsed into a dataframe. - Comment lines and blank lines: we assume that the dataframe contains only data lines. - Custom field names, dtypes, and values. Information supplied out-of-band: - Assembly/chromsizes: a dictionary or pandas Series mapping chromosome names to lengths [optional]. - Custom fields in positions 4-12: which of the first 4 to 12 fields are provided as standard BED fields and which are custom fields. Note that the spec is overly strict. For example, many BED files in the wild will use "." as the uninformative score value for all features, but the spec requires that the score be an integer between 0-1000. We provide some lenience by allowing floats as well, which many tools use in practice. The spec defines the uninformative score value as 0. We also don't enforce limiting name fields to 7-bit printable ascii. """ from __future__ import annotations import pathlib import re import warnings from typing import Callable import numpy as np import pandas as pd __all__ = ["to_bed"] UINT64_MAX = np.iinfo(np.uint64).max # Custom BED fields should contain either one of these data types or a # comma-separated list of Integer, Unsigned, or Float. BED_DTYPE_MAP = { "Integer": np.int64, "Unsigned": np.uint64, "Float": np.float64, "Character": object, "String": object, } BED_FIELD_NAMES = [ "chrom", "start", "end", "name", "score", "strand", "thickStart", "thickEnd", "itemRgb", "blockCount", "blockSizes", "blockStarts", ] BED_FIELD_KINDS = { "chrom": "OU", "start": "iu", "end": "iu", "name": "OU", "score": "iuf", "strand": "OU", "thickStart": "iu", "thickEnd": "iu", "itemRgb": "iOU", # can believe 0 is i "blockCount": "iu", "blockSizes": "OU", "blockStarts": "OU", } BED_FIELD_FILLVALUES = { "chrom": "_", "start": 0, "end": 0, "name": ".", "score": 0, "strand": ".", "itemRgb": "0", } BED_FIELD_VALIDATORS = {} def validator(col: str) -> Callable: def decorator(func: Callable) -> Callable: BED_FIELD_VALIDATORS[col] = func return func return decorator @validator("chrom") def check_chrom(df: pd.DataFrame) -> dict[bool]: """ Validate the chromosome names of a BED dataframe. The chrom column is limited to non-whitespace word characters only (alphanumeric characters and underscores). Each name must be between 1 and 255 characters in length, inclusive. """ # Check that the chrom column contains only alphanumeric characters is_alnum = df["chrom"].str.match(r"^[A-Za-z0-9_]+$").all() # Check that the name column is no longer than 255 characters lengths = df["chrom"].str.len() is_len_ok = ((lengths >= 1) & (lengths <= 255)).all() return { "chrom.is_alnum": is_alnum, "chrom.is_len_ok": is_len_ok, } @validator("start") def check_start( df: pd.DataFrame, chromsizes: dict | pd.Series | None = None ) -> dict[bool]: """ Validate the start coordinates of a BED dataframe. Start must be an integer greater than or equal to 0 and less than or equal to the total number of bases of the chromosome to which it belongs. If the size of the chromosome is unknown, then start must be less than or equal to 2**64 - 1, which is the maximum size of an unsigned 64-bit integer. """ # Check that the start column contains only non-negative integers is_nonneg = (df["start"] >= 0).all() # Check that the start column contains only integers less than 2**64 - 1 is_le_64 = (df["start"] <= UINT64_MAX).all() out = { "start.is_nonneg": is_nonneg, "start.is_le_64": is_le_64, } # Check that the start column contains only integers < the chromosome size if chromsizes is not None: chromsizes = pd.Series(chromsizes) is_lt_chrom = (df["end"] < chromsizes[df["chrom"]]).all() out["start.is_lt_chrom"] = is_lt_chrom return out @validator("end") def check_end( df: pd.DataFrame, chromsizes: dict | pd.Series | None = None ) -> dict[bool]: """ Validate the end coordinates of a BED dataframe. End must be an integer greater than or equal to the value of start and less than or equal to the total number of bases in the chromosome to which it belongs. If the size of the chromosome is unknown, then end must be less than or equal to 2**64 - 1, the maximum size of an unsigned 64-bit integer. """ # Check that the end column contains only non-negative integers is_nonneg = (df["end"] >= 0).all() # Check that the end column contains only integers less than 2**64 - 1 is_le_64 = (df["end"] <= UINT64_MAX).all() is_end_ge_start = (df["end"] >= df["start"]).all() out = { "end.is_nonneg": is_nonneg, "end.is_le_64": is_le_64, "end.is_end_ge_start": is_end_ge_start, } # Check that the end column contains only integers <= the chromosome size if chromsizes is not None: chromsizes = pd.Series(chromsizes) is_le_chrom = (df["end"] <= chromsizes[df["chrom"]]).all() out["end.is_le_chrom"] = is_le_chrom return out @validator("name") def check_name(df: pd.DataFrame) -> dict[bool]: """ Validate the name column of a BED dataframe. Name must be 1 to 255 non-tab characters. Multiple data lines may share the same name. If all features have uninformative names, dot (.) may be used as a name on every data line. """ # Check that the name column is no longer than 255 characters lengths = df["name"].str.len() is_len_ok = ((lengths >= 1) & (lengths <= 255)).all() return { "name.is_len_ok": is_len_ok, } @validator("score") def check_score(df: pd.DataFrame) -> dict[bool]: """ Validate the score column of a BED dataframe. Integer between 0 and 1000, inclusive. When all features have uninformative scores, 0 should be used as the score on every data line. Note: Using "." is illegal in the spec, but is used in practice. 0 is the the uninformative score used in the spec. """ # Check that the score column contains only integers between 0 and 1000, inclusive is_in_range = ((df["score"] >= 0) & (df["score"] <= 1000)).all() return { "score.is_in_range": is_in_range, } @validator("strand") def check_strand(df: pd.DataFrame) -> dict[bool]: """ Validate the strand column of a BED dataframe. Strand must be one of +, -, . (no strand), or ? (unknown strand). When parsing files that are not BED6+, strand should be treated as ".". """ # Check that the strand column contains only valid strand characters is_pattern_ok = df["strand"].str.match(r"^[+\-.?]$").all() return { "strand.is_pattern_ok": is_pattern_ok, } @validator("thickStart") def check_thickStart(df: pd.DataFrame) -> dict[bool]: """ Validate the thickStart column of a BED dataframe. Must be an integer between start and end, inclusive. When all features have uninformative thickStarts, the value of start should be used. """ # Check that the thickStart column contains only integers between start and end, # inclusive is_ge_start = (df["thickStart"] >= df["start"]).all() is_le_end = (df["thickStart"] <= df["end"]).all() return { "thickStart.is_ge_start": is_ge_start, "thickStart.is_le_end": is_le_end, } @validator("thickEnd") def check_thickEnd(df: pd.DataFrame) -> dict[bool]: """ Validate the thickEnd column of a BED dataframe. Must be an integer greater than or equal to start and less than or equal to end, inclusive. When all features have uninformative thickEnds, the value of end should be used. """ # Check that the thickEnd column contains only integers between start and end, # inclusive is_ge_start = (df["thickEnd"] >= df["start"]).all() is_le_end = (df["thickEnd"] <= df["end"]).all() return { "thickEnd.is_ge_start": is_ge_start, "thickEnd.is_le_end": is_le_end, } @validator("itemRgb") def check_itemRgb(df: pd.DataFrame) -> dict[bool]: """ Validate the itemRgb column of a BED dataframe. A triple of 3 integers separated by commas. Each integer is between 0 and 255, inclusive. To make a feature black, itemRgb may be a single 0, as a shorthand for 0,0,0. When all features have uninformative itemRgb values, 0 should be used. """ # Check that the itemRgb is a triple of integers separated by commas # or a single 0 is_pattern_ok = ( df["itemRgb"].astype(str).str.match(r"^(\d{1,3},){2}\d{1,3}$") | (df["itemRgb"].astype(str) == "0") ).all() # Check that the itemRgb column contains only integers between 0 and 255, inclusive is_in_range = ( df["itemRgb"].astype(str) .str.split(",") .apply(lambda x: all([int(i) >= 0 and int(i) <= 255 for i in x])) ).all() return { "itemRgb.is_pattern_ok": is_pattern_ok, "itemRgb.is_in_range": is_in_range, } @validator("blockCount") def check_blockCount(df: pd.DataFrame) -> dict[bool]: """ Validate the blockCount column of a BED dataframe. Must be an integer greater than 0. Note: mandatory in BED12+ files. """ # Check that the blockCount column contains only integers greater than 0 is_gt_0 = (df["blockCount"] > 0).all() return { "blockCount.is_gt_0": is_gt_0, } @validator("blockSizes") def check_blockSizes(df: pd.DataFrame) -> dict[bool]: """ Validate the blockSizes column of a BED dataframe. Comma-separated list of length blockCount containing the size of each block. There must be no spaces before or after commas. There may be a trailing comma after the last element of the list. Note: mandatory in BED12+ files. """ # Check that the blockSizes column contains only comma-separated lists of integers is_pattern_ok = df["blockSizes"].str.match(r"^(\d+,)*\d+(,)?$").all() # Check that the number of block sizes matches the blockCount n_blocks = df["blockSizes"].str.rstrip(",").str.count(",") + 1 is_n_blocks_ok = (n_blocks == df["blockCount"]).all() return { "blockSizes.is_pattern_ok": is_pattern_ok, "blockSizes.is_n_blocks_ok": is_n_blocks_ok, } @validator("blockStarts") def check_blockStarts(df: pd.DataFrame) -> dict[bool]: """ Validate the blockStarts column of a BED dataframe. Comma-separated list of length blockCount containing each block's start position, relative to start. There must not be spaces before or after the commas. There may be a trailing comma after the last element of the list. Each element in blockStarts is paired with the corresponding element in blockSizes. Each blockStarts element must be an integer between 0 and end - start, inclusive. Each block must be contained within the feature. That means that for each couple i of (blockStart, blockSize), the quantity start + blockStart + blockSize must be less or equal to end. The first block must start at start and the last block must end at end. The blockStarts must be sorted in ascending order. The blocks must not overlap. Note: mandatory in BED12+ files. """ # Check that the blockStarts column contains only comma-separated lists of integers is_pattern_ok = df["blockStarts"].str.match(r"^(\d+,)*\d+(,)?$").all() block_starts = ( df["blockStarts"] .str.rstrip(",") .str.split(",") .apply(lambda x: [int(i) for i in x]) ) block_sizes = ( df["blockSizes"] .str.rstrip(",") .str.split(",") .apply(lambda x: [int(i) for i in x]) ) bs_start_end = pd.concat( [block_starts, block_sizes, df["start"], df["end"]], axis=1 ) # Check that the number of block starts matches the blockCount is_n_blocks_ok = (block_starts.apply(len) == df["blockCount"]).all() # Check that the blockStarts are in range is_in_range = bs_start_end.apply( lambda x: all( [ x["blockStarts"][i] >= 0 and x["blockStarts"][i] <= x["end"] for i in range(len(x["blockStarts"])) ] ), axis=1, ).all() # Check that the first block begins at start is_first_block_start = bs_start_end.apply( (lambda x: x["blockStarts"][0] == 0), axis=1 ).all() # Check that the last block stops at end is_last_block_end = bs_start_end.apply( (lambda x: x["blockStarts"][-1] + x["blockSizes"][-1] == x["end"] - x["start"]), axis=1, ).all() # Check that the blockStarts are in ascending order is_sorted = block_starts.apply(lambda x: x == sorted(x)).all() # Check that the blocks do not overlap is_no_overlap = True for row_block_starts, row_block_sizes in zip( block_starts.values, block_sizes.values ): for i in range(len(row_block_starts) - 1): if row_block_starts[i] + row_block_sizes[i] > row_block_starts[i + 1]: is_no_overlap = False break return { "blockStarts.is_pattern_ok": is_pattern_ok, "blockStarts.is_n_blocks_ok": is_n_blocks_ok, "blockStarts.is_in_range": is_in_range, "blockStarts.is_first_block_start": is_first_block_start, "blockStarts.is_last_block_end": is_last_block_end, "blockStarts.is_sorted": is_sorted, "blockStarts.is_no_overlap": is_no_overlap, } def validate_bed_fields( df: pd.DataFrame, fields: list[str], chromsizes: dict | pd.Series | None = None, strict_score: bool = False, ) -> tuple[set[str], set[str], set[str]]: """ Validate the fields of a BED dataframe. Parameters ---------- df : pd.DataFrame BED dataframe to validate. fields : list of str List of fields to validate. chromsizes : dict or Series, optional [default: None] Assembly/chromsizes to validate against. strict_score : bool, optional [default: False] Whether to strictly enforce the score field. Returns ------- Sets containing: (1) names of fields having an invalid dtype, (2) names of fields containing at least one null value, (3) properties that failed validation. Notes ----- The BED spec is overly strict. For example, many BED files in the wild will use "." as the uninformative score value for all features, but the spec requires that the score be an integer between 0-1000. We provide some lenience by allowing floats as well, which many tools use in practice. The spec defines the uninformative score value as 0. """ dtype_failed = set() for col in fields: kind = df[col].dtype.kind if strict_score and col == "score": allowed_kinds = "iu" else: allowed_kinds = BED_FIELD_KINDS[col] if kind not in allowed_kinds: dtype_failed.add(col) notnull = {} for col in fields: if col not in dtype_failed: if col == "score" and not strict_score: continue notnull[col] = df[col].notnull().all() notnull = pd.Series(notnull) notnull_failed = set(notnull.loc[~notnull].index) props = {} for col in fields: if col not in dtype_failed: if col == "score" and not strict_score: continue if col in ("start", "end"): props.update(BED_FIELD_VALIDATORS[col](df, chromsizes)) else: props.update(BED_FIELD_VALIDATORS[col](df)) props = pd.Series(props) prop_failed = set(props.loc[~props].index) return dtype_failed, notnull_failed, prop_failed def check_is_sorted(df: pd.DataFrame) -> dict[bool]: """ Validate that a BED dataframe is sorted. BED dataframes should be sorted by chrom, then by start, then by end. The scheme for sorting the chrom column doesn't matter. The only thing that matters is that all rows with the same chrom value occur consecutively. """ # Check that all rows with the same chrom value are grouped together run_starts = np.r_[ 0, np.flatnonzero(df["chrom"].values[1:] != df["chrom"].values[:-1]) + 1 ] run_values = df["chrom"].to_numpy()[run_starts] is_chrom_consecutive = len(run_values) == len(np.unique(run_values)) # Check that that within chromosomes the rows are sorted by start, then by end is_sorted_start_end = True for _, group in df.groupby("chrom", sort=False): starts = group["start"].to_numpy() ends = group["end"].to_numpy() indices = np.lexsort((ends, starts)) if not ( np.array_equal(starts[indices], starts) and np.array_equal(ends[indices], ends) ): is_sorted_start_end = False break return { "sorted.is_chrom_consecutive": is_chrom_consecutive, "sorted.is_sorted_start_end": is_sorted_start_end, } def infer_bed_schema(df: pd.DataFrame) -> tuple[int, bool]: for i in [12, 9, 8, 7, 6, 5, 4, 3]: if BED_FIELD_NAMES[i - 1] in df.columns: n = i break else: raise ValueError("Could not infer a BED schema.") extended = len(df.columns) > n return n, extended def parse_bed_schema(schema: str) -> tuple[int, bool]: pattern = r"^bed(3|4|5|6|7|8|9|12)?(\+(\d+)?)?$" match = re.match(pattern, schema.lower()) if not match: raise ValueError(f"Invalid BED schema name: {schema}") n = int(match.group(1)) if match.group(1) else 6 extended = match.group(2) is not None return n, extended def to_bed_dataframe( df: pd.DataFrame, schema: str = "infer", validate_fields: bool = True, require_sorted: bool = False, chromsizes: dict | pd.Series | None = None, strict_score: bool = False, replace_na: bool = True, ) -> pd.DataFrame: if schema == "infer": n, extended = infer_bed_schema(df) else: n, extended = parse_bed_schema(schema) if ( "chrom" not in df.columns or "start" not in df.columns or "end" not in df.columns ): raise ValueError( "BED dataframe must have at least 3 fields: chrom, start, end." ) if n == 12 and ( "blockCount" not in df.columns or "blockSizes" not in df.columns or "blockStarts" not in df.columns ): raise ValueError( "Informative blockCount, blockSizes, and blockStarts fields are " "mandatory in BED12+ files." ) standard_cols = BED_FIELD_NAMES[:n] fill_cols = list(set(standard_cols) - set(df.columns)) data_cols = list(set(standard_cols) - set(fill_cols)) custom_cols = list(set(df.columns) - set(standard_cols)) if extended else [] fields_with_nulls = set() if validate_fields: dtypes_failed, fields_with_nulls, props_failed = validate_bed_fields( df, data_cols, chromsizes=chromsizes, strict_score=strict_score ) if dtypes_failed: raise TypeError(f"Fields contain invalid dtypes: {dtypes_failed}.") if fields_with_nulls and not replace_na: raise ValueError(f"Fields contain null values: {fields_with_nulls}.") if props_failed: raise ValueError(f"Properties that failed validation: {props_failed}.") if require_sorted: props = pd.Series(check_is_sorted(df)) props_failed = props.index[~props].tolist() if props_failed: raise ValueError(f"DataFrame isn't properly sorted: {props_failed}.") bed = pd.DataFrame(index=df.index) for col in standard_cols: if col in fill_cols: if col == "thickStart": bed[col] = df["start"] elif col == "thickEnd": bed[col] = df["end"] else: bed[col] = BED_FIELD_FILLVALUES[col] elif col in fields_with_nulls: warnings.warn( f"Standard column {col} contains null values. " "These will be replaced with the uninformative value " f"{BED_FIELD_FILLVALUES[col]}.", stacklevel=2, ) bed[col] = df[col].fillna(BED_FIELD_FILLVALUES[col]) else: bed[col] = df[col] for col in df.columns: if col in custom_cols: bed[col] = df[col] return bed def to_bed( df: pd.DataFrame, path: str | pathlib.Path | None = None, *, schema: str = "infer", validate_fields: bool = True, require_sorted: bool = False, chromsizes: dict | pd.Series | None = None, strict_score: bool = False, replace_na: bool = True, na_rep: str = "nan", ) -> str | None: """Write a DataFrame to a BED file. Parameters ---------- df : pd.DataFrame DataFrame to write. path : str or Path, optional Path to write the BED file to. If ``None``, the serialized BED file is returned as a string. schema : str, optional [default: "infer"] BED schema to use. If ``"infer"``, the schema is inferred from the DataFrame's columns. validate_fields : bool, optional [default: True] Whether to validate the fields of the BED file. require_sorted : bool, optional [default: False] Whether to require the BED file to be sorted. chromsizes : dict or pd.Series, optional Chromosome sizes to validate against. strict_score : bool, optional [default: False] Whether to strictly enforce validation of the score field (0-1000). replace_na : bool, optional [default: True] Whether to replace null values of standard BED fields with compliant uninformative values. na_rep : str, optional [default: "nan"] String representation of null values if written. Returns ------- str or None: The serialized BED file as a string if ``path`` is ``None``, otherwise ``None``. """ bed = to_bed_dataframe( df, schema=schema, validate_fields=validate_fields, require_sorted=require_sorted, chromsizes=chromsizes, strict_score=strict_score, replace_na=replace_na, ) return bed.to_csv(path, sep="\t", na_rep=na_rep, index=False, header=False) open2c-bioframe-4fe9b25/bioframe/io/data/000077500000000000000000000000001477525772300202335ustar00rootroot00000000000000open2c-bioframe-4fe9b25/bioframe/io/data/_assemblies.yml000066400000000000000000000121771477525772300232540ustar00rootroot00000000000000- organism: homo sapiens provider: ncbi provider_build: GRCh37 release_year: 2009 seqinfo: hg19.seqinfo.tsv cytobands: hg19.cytoband.tsv default_roles: [assembled] default_units: [primary, non-nuclear-revised] url: https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/405/GCF_000001405.25_GRCh37.p13/GRCh37_seqs_for_alignment_pipelines/ - organism: homo sapiens provider: ucsc provider_build: hg19 release_year: 2009 seqinfo: hg19.seqinfo.tsv cytobands: hg19.cytoband.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/hg19/bigZips/analysisSet/ - organism: homo sapiens provider: ncbi provider_build: GRCh38 release_year: 2013 seqinfo: hg38.seqinfo.tsv cytobands: hg38.cytoband.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/405/GCF_000001405.26_GRCh38/GRCh38_major_release_seqs_for_alignment_pipelines/ - organism: homo sapiens provider: ucsc provider_build: hg38 release_year: 2013 seqinfo: hg38.seqinfo.tsv cytobands: hg38.cytoband.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/analysisSet/ - organism: homo sapiens provider: ncbi provider_build: T2T-CHM13v2.0 release_year: 2022 seqinfo: hs1.seqinfo.tsv cytobands: hs1.cytoband.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/009/914/755/GCA_009914755.4_T2T-CHM13v2.0/ - organism: homo sapiens provider: ucsc provider_build: hs1 release_year: 2022 seqinfo: hs1.seqinfo.tsv cytobands: hs1.cytoband.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/hs1/bigZips/ - organism: mus musculus provider: ncbi provider_build: MGSCv37 release_year: 2010 seqinfo: mm9.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/635/GCF_000001635.18_MGSCv37/ - organism: mus musculus provider: ucsc provider_build: mm9 release_year: 2007 seqinfo: mm9.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/mm9/bigZips/ - organism: mus musculus provider: ncbi provider_build: GRCm38 release_year: 2011 seqinfo: mm10.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/635/GCF_000001635.20_GRCm38/ - organism: mus musculus provider: ucsc provider_build: mm10 release_year: 2011 seqinfo: mm10.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/mm10/bigZips/ - organism: mus musculus provider: ncbi provider_build: GRCm39 release_year: 2020 seqinfo: mm39.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/001/635/GCF_000001635.27_GRCm39/ - organism: mus musculus provider: ucsc provider_build: mm39 release_year: 2020 seqinfo: mm39.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/mm39/bigZips/ - organism: drosophila melanogaster provider: ucsc provider_build: dm3 release_year: 2006 seqinfo: dm3.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/dm3/bigZips/ - organism: drosophila melanogaster provider: ucsc provider_build: dm6 release_year: 2014 seqinfo: dm6.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/dm6/bigZips/ - organism: caenorhabditis elegans provider: ucsc provider_build: ce10 release_year: 2010 seqinfo: ce10.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/ce10/bigZips/ - organism: caenorhabditis elegans provider: ucsc provider_build: ce11 release_year: 2013 seqinfo: ce11.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/ce11/bigZips/ - organism: danio rerio provider: ucsc provider_build: danRer10 release_year: 2014 seqinfo: danRer10.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/danRer10/bigZips/ - organism: danio rerio provider: ucsc provider_build: danRer11 release_year: 2017 seqinfo: danRer10.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/danRer11/bigZips/ - organism: saccharomyces cerevisiae provider: ucsc provider_build: sacCer3 release_year: 2011 seqinfo: sacCer3.seqinfo.tsv default_roles: [assembled] default_units: [primary, non-nuclear] url: https://hgdownload.soe.ucsc.edu/goldenPath/sacCer3/bigZips/ open2c-bioframe-4fe9b25/bioframe/io/data/ce10.seqinfo.tsv000066400000000000000000000006411477525772300231650ustar00rootroot00000000000000name length role molecule unit aliases chrI 15072423 assembled chrI primary NC_003279.7,I chrII 15279345 assembled chrII primary NC_003280.9,II chrIII 13783700 assembled chrIII primary NC_003281.9,III chrIV 17493793 assembled chrIV primary NC_003282.7,IV chrV 20924149 assembled chrV primary NC_003283.10,V chrX 17718866 assembled chrX primary NC_003284.8,X chrM 13794 assembled chrM non-nuclear NC_001328.1,MT,MtDNA open2c-bioframe-4fe9b25/bioframe/io/data/ce11.seqinfo.tsv000066400000000000000000000006431477525772300231700ustar00rootroot00000000000000name length role molecule unit aliases chrI 15072434 assembled chrI primary NC_003279.8,I chrII 15279421 assembled chrII primary NC_003280.10,II chrIII 13783801 assembled chrIII primary NC_003281.10,III chrIV 17493829 assembled chrIV primary NC_003282.8,IV chrV 20924180 assembled chrV primary NC_003283.11,V chrX 17718942 assembled chrX primary NC_003284.9,X chrM 13794 assembled chrM non-nuclear NC_001328.1,MT,MtDNA open2c-bioframe-4fe9b25/bioframe/io/data/danRer10.seqinfo.tsv000066400000000000000000002123361477525772300240170ustar00rootroot00000000000000name length role molecule unit aliases chr1 58871917 assembled chr1 primary 1,NC_007112.6,CM002885.1 chr2 59543403 assembled chr2 primary 2,NC_007113.6,CM002886.1 chr3 62385949 assembled chr3 primary 3,NC_007114.6,CM002887.1 chr4 76625712 assembled chr4 primary 4,NC_007115.6,CM002888.1 chr5 71715914 assembled chr5 primary 5,NC_007116.6,CM002889.1 chr6 60272633 assembled chr6 primary 6,NC_007117.6,CM002890.1 chr7 74082188 assembled chr7 primary 7,NC_007118.6,CM002891.1 chr8 54191831 assembled chr8 primary 8,NC_007119.6,CM002892.1 chr9 56892771 assembled chr9 primary 9,NC_007120.6,CM002893.1 chr10 45574255 assembled chr10 primary 10,NC_007121.6,CM002894.1 chr11 45107271 assembled chr11 primary 11,NC_007122.6,CM002895.1 chr12 49229541 assembled chr12 primary 12,NC_007123.6,CM002896.1 chr13 51780250 assembled chr13 primary 13,NC_007124.6,CM002897.1 chr14 51944548 assembled chr14 primary 14,NC_007125.6,CM002898.1 chr15 47771147 assembled chr15 primary 15,NC_007126.6,CM002899.1 chr16 55381981 assembled chr16 primary 16,NC_007127.6,CM002900.1 chr17 53345113 assembled chr17 primary 17,NC_007128.6,CM002901.1 chr18 51008593 assembled chr18 primary 18,NC_007129.6,CM002902.1 chr19 48790377 assembled chr19 primary 19,NC_007130.6,CM002903.1 chr20 55370968 assembled chr20 primary 20,NC_007131.6,CM002904.1 chr21 45895719 assembled chr21 primary 21,NC_007132.6,CM002905.1 chr22 39226288 assembled chr22 primary 22,NC_007133.6,CM002906.1 chr23 46272358 assembled chr23 primary 23,NC_007134.6,CM002907.1 chr24 42251103 assembled chr24 primary 24,NC_007135.6,CM002908.1 chr25 36898761 assembled chr25 primary 25,NC_007136.6,CM002909.1 chrM 16596 assembled chrM non-nuclear MT,NC_002333.2 chrUn_KN149679v1 35552 unplaced primary NW_003043344.3,KN149679.1 chrUn_KN149680v1 38724 unplaced primary NW_003336264.2,KN149680.1 chrUn_KN149681v1 107758 unplaced primary NW_003051371.3,KN149681.1 chrUn_KN149682v1 137468 unplaced primary NW_001878251.4,KN149682.1 chrUn_KN149683v1 152860 unplaced primary NW_001884381.4,KN149683.1 chrUn_KN149684v1 159057 unplaced primary NW_001878128.4,KN149684.1 chrUn_KN149685v1 164780 unplaced primary NW_001884386.4,KN149685.1 chrUn_KN149686v1 260365 unplaced primary NW_003044888.3,KN149686.1 chrUn_KN149687v1 165668 unplaced primary NW_001884400.4,KN149687.1 chrUn_KN149688v1 252705 unplaced primary NW_001878118.4,KN149688.1 chrUn_KN149689v1 196689 unplaced primary NW_001879289.4,KN149689.1 chrUn_KN149690v1 343018 unplaced primary NW_001884413.3,KN149690.1 chrUn_KN149691v1 233193 unplaced primary NW_001884427.4,KN149691.1 chrUn_KN149692v1 36911 unplaced primary NW_001884442.4,KN149692.1 chrUn_KN149693v1 49295 unplaced primary NW_001884441.4,KN149693.1 chrUn_KN149694v1 162759 unplaced primary NW_001884444.4,KN149694.1 chrUn_KN149695v1 190731 unplaced primary NW_003039389.3,KN149695.1 chrUn_KN149696v1 368637 unplaced primary NW_003039384.3,KN149696.1 chrUn_KN149697v1 40969 unplaced primary NW_008805346.1,KN149697.1 chrUn_KN149698v1 108577 unplaced primary NW_008805347.1,KN149698.1 chrUn_KN149699v1 33146 unplaced primary NW_003336805.1,KN149699.1 chrUn_KN149700v1 40050 unplaced primary NW_003337144.1,KN149700.1 chrUn_KN149701v1 3760 unplaced primary NW_008805348.1,KN149701.1 chrUn_KN149702v1 100325 unplaced primary NW_008805349.1,KN149702.1 chrUn_KN149703v1 13902 unplaced primary NW_003336866.1,KN149703.1 chrUn_KN149704v1 48089 unplaced primary NW_008805350.1,KN149704.1 chrUn_KN149705v1 27926 unplaced primary NW_003336598.1,KN149705.1 chrUn_KN149706v1 33279 unplaced primary NW_003336851.1,KN149706.1 chrUn_KN149707v1 6001 unplaced primary NW_008805351.1,KN149707.1 chrUn_KN149708v1 20567 unplaced primary NW_003337018.1,KN149708.1 chrUn_KN149709v1 27814 unplaced primary NW_003336433.1,KN149709.1 chrUn_KN149710v1 50974 unplaced primary NW_003335779.1,KN149710.1 chrUn_KN149711v1 11473 unplaced primary NW_003336950.1,KN149711.1 chrUn_KN149712v1 1115 unplaced primary NW_008805352.1,KN149712.1 chrUn_KN149713v1 10094 unplaced primary NW_008805353.1,KN149713.1 chrUn_KN149714v1 74622 unplaced primary NW_003337205.1,KN149714.1 chrUn_KN149715v1 19020 unplaced primary NW_003336714.2,KN149715.1 chrUn_KN149716v1 42229 unplaced primary NW_003334619.1,KN149716.1 chrUn_KN149717v1 47589 unplaced primary NW_003337229.1,KN149717.1 chrUn_KN149718v1 65247 unplaced primary NW_003336716.1,KN149718.1 chrUn_KN149719v1 47531 unplaced primary NW_003337263.1,KN149719.1 chrUn_KN149720v1 10211 unplaced primary NW_008805354.1,KN149720.1 chrUn_KN149721v1 25462 unplaced primary NW_003336827.1,KN149721.1 chrUn_KN149722v1 13397 unplaced primary NW_003336457.1,KN149722.1 chrUn_KN149723v1 55784 unplaced primary NW_003337194.1,KN149723.1 chrUn_KN149724v1 11849 unplaced primary NW_003336519.1,KN149724.1 chrUn_KN149725v1 69829 unplaced primary NW_003336869.1,KN149725.1 chrUn_KN149726v1 2146 unplaced primary NW_008805355.1,KN149726.1 chrUn_KN149727v1 24871 unplaced primary NW_003336152.2,KN149727.1 chrUn_KN149728v1 9442 unplaced primary NW_003336547.1,KN149728.1 chrUn_KN149729v1 5608 unplaced primary NW_008805356.1,KN149729.1 chrUn_KN149730v1 14804 unplaced primary NW_003336623.1,KN149730.1 chrUn_KN149731v1 19431 unplaced primary NW_008805357.1,KN149731.1 chrUn_KN149732v1 16041 unplaced primary NW_003336490.1,KN149732.1 chrUn_KN149733v1 21637 unplaced primary NW_003336868.1,KN149733.1 chrUn_KN149734v1 6288 unplaced primary NW_003337155.1,KN149734.1 chrUn_KN149735v1 5747 unplaced primary NW_008805358.1,KN149735.1 chrUn_KN149736v1 1649 unplaced primary NW_008805359.1,KN149736.1 chrUn_KN149737v1 27700 unplaced primary NW_003336345.1,KN149737.1 chrUn_KN149738v1 10603 unplaced primary NW_003337254.2,KN149738.1 chrUn_KN149739v1 51610 unplaced primary NW_003336823.1,KN149739.1 chrUn_KN149740v1 1265 unplaced primary NW_003334432.1,KN149740.1 chrUn_KN149741v1 21941 unplaced primary NW_003337078.1,KN149741.1 chrUn_KN149742v1 2671 unplaced primary NW_003336474.1,KN149742.1 chrUn_KN149743v1 21023 unplaced primary NW_003336724.1,KN149743.1 chrUn_KN149744v1 19164 unplaced primary NW_008805360.1,KN149744.1 chrUn_KN149745v1 8150 unplaced primary NW_003337249.1,KN149745.1 chrUn_KN149746v1 10900 unplaced primary NW_008805361.1,KN149746.1 chrUn_KN149747v1 16275 unplaced primary NW_003336980.1,KN149747.1 chrUn_KN149748v1 96570 unplaced primary NW_003336540.1,KN149748.1 chrUn_KN149749v1 40089 unplaced primary NW_003336941.1,KN149749.1 chrUn_KN149750v1 13928 unplaced primary NW_003336571.1,KN149750.1 chrUn_KN149751v1 15848 unplaced primary NW_003336649.1,KN149751.1 chrUn_KN149752v1 16628 unplaced primary NW_003335206.1,KN149752.1 chrUn_KN149753v1 30249 unplaced primary NW_003336977.1,KN149753.1 chrUn_KN149754v1 40214 unplaced primary NW_003336969.1,KN149754.1 chrUn_KN149755v1 11941 unplaced primary NW_003337240.1,KN149755.1 chrUn_KN149756v1 11785 unplaced primary NW_003337114.1,KN149756.1 chrUn_KN149757v1 16145 unplaced primary NW_003334832.2,KN149757.1 chrUn_KN149758v1 9515 unplaced primary NW_003336859.1,KN149758.1 chrUn_KN149759v1 38290 unplaced primary NW_008805362.1,KN149759.1 chrUn_KN149760v1 46605 unplaced primary NW_003336744.1,KN149760.1 chrUn_KN149761v1 14795 unplaced primary NW_003336095.2,KN149761.1 chrUn_KN149762v1 17936 unplaced primary NW_008805363.1,KN149762.1 chrUn_KN149763v1 19644 unplaced primary NW_003336711.1,KN149763.1 chrUn_KN149764v1 19831 unplaced primary NW_003337091.2,KN149764.1 chrUn_KN149765v1 29197 unplaced primary NW_003336801.1,KN149765.1 chrUn_KN149766v1 14664 unplaced primary NW_003336970.1,KN149766.1 chrUn_KN149767v1 30874 unplaced primary NW_003337044.1,KN149767.1 chrUn_KN149768v1 17671 unplaced primary NW_003336765.1,KN149768.1 chrUn_KN149769v1 53048 unplaced primary NW_003337010.1,KN149769.1 chrUn_KN149770v1 12046 unplaced primary NW_003337047.1,KN149770.1 chrUn_KN149771v1 14151 unplaced primary NW_003336986.1,KN149771.1 chrUn_KN149772v1 13273 unplaced primary NW_003337052.1,KN149772.1 chrUn_KN149773v1 1302 unplaced primary NW_003335749.1,KN149773.1 chrUn_KN149774v1 12337 unplaced primary NW_003336170.1,KN149774.1 chrUn_KN149775v1 18776 unplaced primary NW_003334589.1,KN149775.1 chrUn_KN149776v1 2919 unplaced primary NW_003335549.1,KN149776.1 chrUn_KN149777v1 1553 unplaced primary NW_008805364.1,KN149777.1 chrUn_KN149778v1 111598 unplaced primary NW_003337175.1,KN149778.1 chrUn_KN149779v1 21664 unplaced primary NW_003334443.1,KN149779.1 chrUn_KN149780v1 19718 unplaced primary NW_003334404.1,KN149780.1 chrUn_KN149781v1 9962 unplaced primary NW_003334099.1,KN149781.1 chrUn_KN149782v1 36097 unplaced primary NW_003337232.1,KN149782.1 chrUn_KN149783v1 11892 unplaced primary NW_003336802.1,KN149783.1 chrUn_KN149784v1 73829 unplaced primary NW_003337109.1,KN149784.1 chrUn_KN149785v1 1577 unplaced primary NW_003336582.1,KN149785.1 chrUn_KN149786v1 1745 unplaced primary NW_008805365.1,KN149786.1 chrUn_KN149787v1 39794 unplaced primary NW_003335933.1,KN149787.1 chrUn_KN149788v1 8794 unplaced primary NW_008805366.1,KN149788.1 chrUn_KN149789v1 12990 unplaced primary NW_003337184.1,KN149789.1 chrUn_KN149790v1 115850 unplaced primary NW_003336877.1,KN149790.1 chrUn_KN149791v1 17273 unplaced primary NW_003336635.1,KN149791.1 chrUn_KN149792v1 11232 unplaced primary NW_003337069.1,KN149792.1 chrUn_KN149793v1 13298 unplaced primary NW_008805367.1,KN149793.1 chrUn_KN149794v1 25440 unplaced primary NW_008805368.1,KN149794.1 chrUn_KN149795v1 34615 unplaced primary NW_003336860.1,KN149795.1 chrUn_KN149796v1 25635 unplaced primary NW_003336550.1,KN149796.1 chrUn_KN149797v1 102101 unplaced primary NW_003334026.1,KN149797.1 chrUn_KN149798v1 1990 unplaced primary NW_003336837.1,KN149798.1 chrUn_KN149799v1 27060 unplaced primary NW_003335558.1,KN149799.1 chrUn_KN149800v1 42049 unplaced primary NW_008805369.1,KN149800.1 chrUn_KN149801v1 4454 unplaced primary NW_003336889.1,KN149801.1 chrUn_KN149802v1 3818 unplaced primary NW_003334854.1,KN149802.1 chrUn_KN149803v1 16018 unplaced primary NW_003337090.1,KN149803.1 chrUn_KN149804v1 10148 unplaced primary NW_003337095.1,KN149804.1 chrUn_KN149805v1 12432 unplaced primary NW_003336290.1,KN149805.1 chrUn_KN149806v1 15157 unplaced primary NW_008805370.1,KN149806.1 chrUn_KN149807v1 12512 unplaced primary NW_003334875.1,KN149807.1 chrUn_KN149808v1 15454 unplaced primary NW_003336495.1,KN149808.1 chrUn_KN149809v1 2001 unplaced primary NW_003336915.1,KN149809.1 chrUn_KN149810v1 15043 unplaced primary NW_003336919.1,KN149810.1 chrUn_KN149811v1 8720 unplaced primary NW_003336886.1,KN149811.1 chrUn_KN149812v1 51419 unplaced primary NW_003336288.1,KN149812.1 chrUn_KN149813v1 59009 unplaced primary NW_003336509.1,KN149813.1 chrUn_KN149814v1 25878 unplaced primary NW_003334686.1,KN149814.1 chrUn_KN149815v1 33337 unplaced primary NW_003334684.1,KN149815.1 chrUn_KN149816v1 10128 unplaced primary NW_003335521.2,KN149816.1 chrUn_KN149817v1 11116 unplaced primary NW_003337049.1,KN149817.1 chrUn_KN149818v1 25942 unplaced primary NW_003335384.1,KN149818.1 chrUn_KN149819v1 10210 unplaced primary NW_008805371.1,KN149819.1 chrUn_KN149820v1 1281 unplaced primary NW_008805372.1,KN149820.1 chrUn_KN149821v1 31785 unplaced primary NW_003336346.1,KN149821.1 chrUn_KN149822v1 2460 unplaced primary NW_003336643.1,KN149822.1 chrUn_KN149823v1 14034 unplaced primary NW_003335161.1,KN149823.1 chrUn_KN149824v1 2357 unplaced primary NW_003336698.1,KN149824.1 chrUn_KN149825v1 22128 unplaced primary NW_003336761.1,KN149825.1 chrUn_KN149826v1 90482 unplaced primary NW_003336654.1,KN149826.1 chrUn_KN149827v1 13555 unplaced primary NW_008805373.1,KN149827.1 chrUn_KN149828v1 11414 unplaced primary NW_003336660.1,KN149828.1 chrUn_KN149829v1 27323 unplaced primary NW_003335757.1,KN149829.1 chrUn_KN149830v1 32768 unplaced primary NW_008805374.1,KN149830.1 chrUn_KN149831v1 50343 unplaced primary NW_008805375.1,KN149831.1 chrUn_KN149832v1 12483 unplaced primary NW_003336959.1,KN149832.1 chrUn_KN149833v1 2778 unplaced primary NW_008805376.1,KN149833.1 chrUn_KN149834v1 17343 unplaced primary NW_003337098.1,KN149834.1 chrUn_KN149835v1 25861 unplaced primary NW_003334814.2,KN149835.1 chrUn_KN149836v1 34954 unplaced primary NW_003335691.1,KN149836.1 chrUn_KN149837v1 8007 unplaced primary NW_003336667.1,KN149837.1 chrUn_KN149838v1 29025 unplaced primary NW_003337138.1,KN149838.1 chrUn_KN149839v1 12998 unplaced primary NW_003336838.1,KN149839.1 chrUn_KN149840v1 46864 unplaced primary NW_003336831.1,KN149840.1 chrUn_KN149841v1 10085 unplaced primary NW_003336073.1,KN149841.1 chrUn_KN149842v1 17614 unplaced primary NW_003335960.1,KN149842.1 chrUn_KN149843v1 33258 unplaced primary NW_003336867.1,KN149843.1 chrUn_KN149844v1 10201 unplaced primary NW_003336430.1,KN149844.1 chrUn_KN149845v1 3367 unplaced primary NW_008805377.1,KN149845.1 chrUn_KN149846v1 28664 unplaced primary NW_003336483.1,KN149846.1 chrUn_KN149847v1 130903 unplaced primary NW_003337258.1,KN149847.1 chrUn_KN149848v1 10341 unplaced primary NW_003336432.1,KN149848.1 chrUn_KN149849v1 20421 unplaced primary NW_008805378.1,KN149849.1 chrUn_KN149850v1 33401 unplaced primary NW_003337014.1,KN149850.1 chrUn_KN149851v1 12094 unplaced primary NW_003336419.1,KN149851.1 chrUn_KN149852v1 30223 unplaced primary NW_008805379.1,KN149852.1 chrUn_KN149853v1 12817 unplaced primary NW_003336917.1,KN149853.1 chrUn_KN149854v1 6367 unplaced primary NW_008805380.1,KN149854.1 chrUn_KN149855v1 23165 unplaced primary NW_003334236.1,KN149855.1 chrUn_KN149856v1 35330 unplaced primary NW_003334447.1,KN149856.1 chrUn_KN149857v1 10132 unplaced primary NW_008805381.1,KN149857.1 chrUn_KN149858v1 44054 unplaced primary NW_003334458.2,KN149858.1 chrUn_KN149859v1 53306 unplaced primary NW_003336720.1,KN149859.1 chrUn_KN149860v1 17408 unplaced primary NW_003336315.1,KN149860.1 chrUn_KN149861v1 14336 unplaced primary NW_003336809.1,KN149861.1 chrUn_KN149862v1 11987 unplaced primary NW_003336301.1,KN149862.1 chrUn_KN149863v1 11955 unplaced primary NW_008805382.1,KN149863.1 chrUn_KN149864v1 12929 unplaced primary NW_008805383.1,KN149864.1 chrUn_KN149865v1 49167 unplaced primary NW_008805384.1,KN149865.1 chrUn_KN149866v1 14752 unplaced primary NW_003337099.1,KN149866.1 chrUn_KN149867v1 1514 unplaced primary NW_008805385.1,KN149867.1 chrUn_KN149868v1 50629 unplaced primary NW_003336470.1,KN149868.1 chrUn_KN149869v1 21474 unplaced primary NW_008805386.1,KN149869.1 chrUn_KN149870v1 44680 unplaced primary NW_003336738.1,KN149870.1 chrUn_KN149871v1 22553 unplaced primary NW_003336239.1,KN149871.1 chrUn_KN149872v1 12222 unplaced primary NW_008805387.1,KN149872.1 chrUn_KN149873v1 1146 unplaced primary NW_008805388.1,KN149873.1 chrUn_KN149874v1 5295 unplaced primary NW_003335638.2,KN149874.1 chrUn_KN149875v1 13354 unplaced primary NW_008805389.1,KN149875.1 chrUn_KN149876v1 11298 unplaced primary NW_003336849.1,KN149876.1 chrUn_KN149877v1 30410 unplaced primary NW_003336883.1,KN149877.1 chrUn_KN149878v1 7547 unplaced primary NW_008805390.1,KN149878.1 chrUn_KN149879v1 11893 unplaced primary NW_003335459.1,KN149879.1 chrUn_KN149880v1 64889 unplaced primary NW_008805391.1,KN149880.1 chrUn_KN149881v1 10736 unplaced primary NW_008805392.1,KN149881.1 chrUn_KN149882v1 7649 unplaced primary NW_008805393.1,KN149882.1 chrUn_KN149883v1 12434 unplaced primary NW_003334215.1,KN149883.1 chrUn_KN149884v1 51715 unplaced primary NW_008805394.1,KN149884.1 chrUn_KN149885v1 1347 unplaced primary NW_003337168.1,KN149885.1 chrUn_KN149886v1 1633 unplaced primary NW_003336535.1,KN149886.1 chrUn_KN149887v1 11971 unplaced primary NW_003336454.2,KN149887.1 chrUn_KN149888v1 17117 unplaced primary NW_003336349.1,KN149888.1 chrUn_KN149889v1 10166 unplaced primary NW_003336465.1,KN149889.1 chrUn_KN149890v1 12029 unplaced primary NW_003336424.1,KN149890.1 chrUn_KN149891v1 10762 unplaced primary NW_003336702.1,KN149891.1 chrUn_KN149892v1 24638 unplaced primary NW_003336629.1,KN149892.1 chrUn_KN149893v1 27995 unplaced primary NW_003337247.1,KN149893.1 chrUn_KN149894v1 15058 unplaced primary NW_008805395.1,KN149894.1 chrUn_KN149895v1 92930 unplaced primary NW_003334263.2,KN149895.1 chrUn_KN149896v1 13102 unplaced primary NW_003336289.1,KN149896.1 chrUn_KN149897v1 14044 unplaced primary NW_003336689.1,KN149897.1 chrUn_KN149898v1 4537 unplaced primary NW_008805396.1,KN149898.1 chrUn_KN149899v1 13632 unplaced primary NW_003336497.1,KN149899.1 chrUn_KN149900v1 11016 unplaced primary NW_008805397.1,KN149900.1 chrUn_KN149901v1 10512 unplaced primary NW_003337164.1,KN149901.1 chrUn_KN149902v1 16044 unplaced primary NW_003336449.1,KN149902.1 chrUn_KN149903v1 11318 unplaced primary NW_008805398.1,KN149903.1 chrUn_KN149904v1 89156 unplaced primary NW_003336333.2,KN149904.1 chrUn_KN149905v1 14056 unplaced primary NW_003336852.1,KN149905.1 chrUn_KN149906v1 38987 unplaced primary NW_003336751.1,KN149906.1 chrUn_KN149907v1 9870 unplaced primary NW_003337174.1,KN149907.1 chrUn_KN149908v1 12800 unplaced primary NW_003336848.1,KN149908.1 chrUn_KN149909v1 40056 unplaced primary NW_003336633.1,KN149909.1 chrUn_KN149910v1 142061 unplaced primary NW_003335139.1,KN149910.1 chrUn_KN149911v1 11128 unplaced primary NW_003336186.1,KN149911.1 chrUn_KN149912v1 77979 unplaced primary NW_003334245.1,KN149912.1 chrUn_KN149913v1 16487 unplaced primary NW_003337199.1,KN149913.1 chrUn_KN149914v1 18241 unplaced primary NW_003336354.1,KN149914.1 chrUn_KN149915v1 10395 unplaced primary NW_003336864.1,KN149915.1 chrUn_KN149916v1 4293 unplaced primary NW_003334505.1,KN149916.1 chrUn_KN149917v1 3831 unplaced primary NW_003335158.1,KN149917.1 chrUn_KN149918v1 6170 unplaced primary NW_008805399.1,KN149918.1 chrUn_KN149919v1 21073 unplaced primary NW_003336948.1,KN149919.1 chrUn_KN149920v1 18168 unplaced primary NW_003334756.2,KN149920.1 chrUn_KN149921v1 28254 unplaced primary NW_003336310.1,KN149921.1 chrUn_KN149922v1 12529 unplaced primary NW_008805400.1,KN149922.1 chrUn_KN149923v1 36729 unplaced primary NW_008805401.1,KN149923.1 chrUn_KN149924v1 23395 unplaced primary NW_003336874.1,KN149924.1 chrUn_KN149925v1 29860 unplaced primary NW_003336561.2,KN149925.1 chrUn_KN149926v1 3688 unplaced primary NW_003335249.1,KN149926.1 chrUn_KN149927v1 11950 unplaced primary NW_003335051.1,KN149927.1 chrUn_KN149928v1 14297 unplaced primary NW_003336610.1,KN149928.1 chrUn_KN149929v1 38097 unplaced primary NW_008805402.1,KN149929.1 chrUn_KN149930v1 98773 unplaced primary NW_003335313.1,KN149930.1 chrUn_KN149931v1 6703 unplaced primary NW_003335250.1,KN149931.1 chrUn_KN149932v1 89521 unplaced primary NW_003334672.2,KN149932.1 chrUn_KN149933v1 13433 unplaced primary NW_003336909.1,KN149933.1 chrUn_KN149934v1 12451 unplaced primary NW_003337169.1,KN149934.1 chrUn_KN149935v1 9230 unplaced primary NW_003336782.1,KN149935.1 chrUn_KN149936v1 16058 unplaced primary NW_003337066.1,KN149936.1 chrUn_KN149937v1 14110 unplaced primary NW_003335043.1,KN149937.1 chrUn_KN149938v1 12455 unplaced primary NW_003335831.2,KN149938.1 chrUn_KN149939v1 76611 unplaced primary NW_003336586.1,KN149939.1 chrUn_KN149940v1 11887 unplaced primary NW_003336458.1,KN149940.1 chrUn_KN149941v1 13607 unplaced primary NW_003336575.1,KN149941.1 chrUn_KN149942v1 9522 unplaced primary NW_008805403.1,KN149942.1 chrUn_KN149943v1 29608 unplaced primary NW_003334256.1,KN149943.1 chrUn_KN149944v1 24909 unplaced primary NW_003336415.1,KN149944.1 chrUn_KN149945v1 9994 unplaced primary NW_008805404.1,KN149945.1 chrUn_KN149946v1 33071 unplaced primary NW_003336936.1,KN149946.1 chrUn_KN149947v1 23293 unplaced primary NW_008805405.1,KN149947.1 chrUn_KN149948v1 117499 unplaced primary NW_003336703.1,KN149948.1 chrUn_KN149949v1 64126 unplaced primary NW_003336421.1,KN149949.1 chrUn_KN149950v1 5952 unplaced primary NW_003336979.1,KN149950.1 chrUn_KN149951v1 5000 unplaced primary NW_008805406.1,KN149951.1 chrUn_KN149952v1 66365 unplaced primary NW_003336406.1,KN149952.1 chrUn_KN149953v1 46218 unplaced primary NW_003337062.1,KN149953.1 chrUn_KN149954v1 1953 unplaced primary NW_008805407.1,KN149954.1 chrUn_KN149955v1 19758 unplaced primary NW_003336646.1,KN149955.1 chrUn_KN149956v1 1889 unplaced primary NW_008805408.1,KN149956.1 chrUn_KN149957v1 1094 unplaced primary NW_008805409.1,KN149957.1 chrUn_KN149958v1 43073 unplaced primary NW_003336942.1,KN149958.1 chrUn_KN149959v1 59274 unplaced primary NW_003336480.1,KN149959.1 chrUn_KN149960v1 9235 unplaced primary NW_003336389.1,KN149960.1 chrUn_KN149961v1 20600 unplaced primary NW_003337190.1,KN149961.1 chrUn_KN149962v1 136181 unplaced primary NW_003335337.2,KN149962.1 chrUn_KN149963v1 83881 unplaced primary NW_003336881.1,KN149963.1 chrUn_KN149964v1 11592 unplaced primary NW_008805410.1,KN149964.1 chrUn_KN149965v1 14790 unplaced primary NW_003336066.1,KN149965.1 chrUn_KN149966v1 131566 unplaced primary NW_008805411.1,KN149966.1 chrUn_KN149967v1 8612 unplaced primary NW_003335242.1,KN149967.1 chrUn_KN149968v1 82990 unplaced primary NW_003336650.1,KN149968.1 chrUn_KN149969v1 13714 unplaced primary NW_003336580.1,KN149969.1 chrUn_KN149970v1 17511 unplaced primary NW_003336817.2,KN149970.1 chrUn_KN149971v1 11275 unplaced primary NW_008805412.1,KN149971.1 chrUn_KN149972v1 1358 unplaced primary NW_008805413.1,KN149972.1 chrUn_KN149973v1 35555 unplaced primary NW_003336937.1,KN149973.1 chrUn_KN149974v1 19596 unplaced primary NW_003336967.1,KN149974.1 chrUn_KN149975v1 2035 unplaced primary NW_008805414.1,KN149975.1 chrUn_KN149976v1 11858 unplaced primary NW_003336371.1,KN149976.1 chrUn_KN149977v1 20138 unplaced primary NW_003337153.2,KN149977.1 chrUn_KN149978v1 16801 unplaced primary NW_003337086.1,KN149978.1 chrUn_KN149979v1 22834 unplaced primary NW_003336097.2,KN149979.1 chrUn_KN149980v1 7980 unplaced primary NW_008805415.1,KN149980.1 chrUn_KN149981v1 12811 unplaced primary NW_003337160.1,KN149981.1 chrUn_KN149982v1 31814 unplaced primary NW_003337139.1,KN149982.1 chrUn_KN149983v1 17884 unplaced primary NW_003336330.2,KN149983.1 chrUn_KN149984v1 96477 unplaced primary NW_003337241.1,KN149984.1 chrUn_KN149985v1 1354 unplaced primary NW_008805416.1,KN149985.1 chrUn_KN149986v1 8801 unplaced primary NW_003334166.1,KN149986.1 chrUn_KN149987v1 38433 unplaced primary NW_003336196.1,KN149987.1 chrUn_KN149988v1 9944 unplaced primary NW_003336685.1,KN149988.1 chrUn_KN149989v1 34480 unplaced primary NW_003336748.2,KN149989.1 chrUn_KN149990v1 57651 unplaced primary NW_003337093.1,KN149990.1 chrUn_KN149991v1 9871 unplaced primary NW_003337156.1,KN149991.1 chrUn_KN149992v1 57912 unplaced primary NW_003336600.1,KN149992.1 chrUn_KN149993v1 16921 unplaced primary NW_003336466.1,KN149993.1 chrUn_KN149994v1 1137 unplaced primary NW_003336317.1,KN149994.1 chrUn_KN149995v1 12015 unplaced primary NW_008805417.1,KN149995.1 chrUn_KN149996v1 33528 unplaced primary NW_003337137.1,KN149996.1 chrUn_KN149997v1 6296 unplaced primary NW_003336787.1,KN149997.1 chrUn_KN149998v1 74724 unplaced primary NW_003336316.1,KN149998.1 chrUn_KN149999v1 14071 unplaced primary NW_003336567.1,KN149999.1 chrUn_KN150000v1 69737 unplaced primary NW_003334656.2,KN150000.1 chrUn_KN150001v1 28767 unplaced primary NW_003334035.2,KN150001.1 chrUn_KN150002v1 17430 unplaced primary NW_003336323.1,KN150002.1 chrUn_KN150003v1 19572 unplaced primary NW_008805418.1,KN150003.1 chrUn_KN150004v1 11444 unplaced primary NW_003334666.2,KN150004.1 chrUn_KN150005v1 34409 unplaced primary NW_003336945.1,KN150005.1 chrUn_KN150006v1 10518 unplaced primary NW_003336825.1,KN150006.1 chrUn_KN150007v1 13072 unplaced primary NW_003336659.1,KN150007.1 chrUn_KN150008v1 15572 unplaced primary NW_003337256.1,KN150008.1 chrUn_KN150009v1 17727 unplaced primary NW_003336489.1,KN150009.1 chrUn_KN150010v1 14703 unplaced primary NW_003337119.1,KN150010.1 chrUn_KN150011v1 12995 unplaced primary NW_003336777.1,KN150011.1 chrUn_KN150012v1 11998 unplaced primary NW_008805419.1,KN150012.1 chrUn_KN150013v1 8488 unplaced primary NW_003334233.2,KN150013.1 chrUn_KN150014v1 13588 unplaced primary NW_003337111.1,KN150014.1 chrUn_KN150015v1 33441 unplaced primary NW_003337220.1,KN150015.1 chrUn_KN150016v1 21592 unplaced primary NW_003335387.1,KN150016.1 chrUn_KN150017v1 25636 unplaced primary NW_003337217.1,KN150017.1 chrUn_KN150018v1 1063 unplaced primary NW_008805420.1,KN150018.1 chrUn_KN150019v1 28998 unplaced primary NW_003337129.1,KN150019.1 chrUn_KN150020v1 11925 unplaced primary NW_003336607.1,KN150020.1 chrUn_KN150021v1 103967 unplaced primary NW_003337037.1,KN150021.1 chrUn_KN150022v1 76538 unplaced primary NW_003336365.1,KN150022.1 chrUn_KN150023v1 22153 unplaced primary NW_003336353.1,KN150023.1 chrUn_KN150024v1 1714 unplaced primary NW_003336344.1,KN150024.1 chrUn_KN150025v1 26343 unplaced primary NW_003337067.1,KN150025.1 chrUn_KN150026v1 1755 unplaced primary NW_003337185.1,KN150026.1 chrUn_KN150027v1 2148 unplaced primary NW_008805421.1,KN150027.1 chrUn_KN150028v1 19517 unplaced primary NW_008805422.1,KN150028.1 chrUn_KN150029v1 12415 unplaced primary NW_008805423.1,KN150029.1 chrUn_KN150030v1 57074 unplaced primary NW_003336951.2,KN150030.1 chrUn_KN150031v1 60899 unplaced primary NW_003337200.1,KN150031.1 chrUn_KN150032v1 29546 unplaced primary NW_003336336.1,KN150032.1 chrUn_KN150033v1 56448 unplaced primary NW_003336670.1,KN150033.1 chrUn_KN150034v1 1919 unplaced primary NW_008805424.1,KN150034.1 chrUn_KN150035v1 38086 unplaced primary NW_003334265.1,KN150035.1 chrUn_KN150036v1 4412 unplaced primary NW_008805425.1,KN150036.1 chrUn_KN150037v1 2866 unplaced primary NW_003336693.1,KN150037.1 chrUn_KN150038v1 71326 unplaced primary NW_003336974.1,KN150038.1 chrUn_KN150039v1 3463 unplaced primary NW_003335647.1,KN150039.1 chrUn_KN150040v1 19896 unplaced primary NW_008805426.1,KN150040.1 chrUn_KN150041v1 58003 unplaced primary NW_003334673.2,KN150041.1 chrUn_KN150042v1 30789 unplaced primary NW_003335185.2,KN150042.1 chrUn_KN150043v1 31984 unplaced primary NW_008805427.1,KN150043.1 chrUn_KN150044v1 9097 unplaced primary NW_003334669.1,KN150044.1 chrUn_KN150045v1 23207 unplaced primary NW_008805428.1,KN150045.1 chrUn_KN150046v1 148772 unplaced primary NW_003336786.1,KN150046.1 chrUn_KN150047v1 20749 unplaced primary NW_003337234.1,KN150047.1 chrUn_KN150048v1 128109 unplaced primary NW_003336792.1,KN150048.1 chrUn_KN150049v1 45008 unplaced primary NW_003336830.1,KN150049.1 chrUn_KN150050v1 8203 unplaced primary NW_008805429.1,KN150050.1 chrUn_KN150051v1 1995 unplaced primary NW_008805430.1,KN150051.1 chrUn_KN150052v1 15943 unplaced primary NW_003335153.1,KN150052.1 chrUn_KN150053v1 32328 unplaced primary NW_003335494.1,KN150053.1 chrUn_KN150054v1 16143 unplaced primary NW_003336990.1,KN150054.1 chrUn_KN150055v1 32561 unplaced primary NW_003335922.2,KN150055.1 chrUn_KN150056v1 29449 unplaced primary NW_008805431.1,KN150056.1 chrUn_KN150057v1 10736 unplaced primary NW_003336282.1,KN150057.1 chrUn_KN150058v1 21348 unplaced primary NW_003336625.1,KN150058.1 chrUn_KN150059v1 16588 unplaced primary NW_003334628.1,KN150059.1 chrUn_KN150060v1 80234 unplaced primary NW_003336912.2,KN150060.1 chrUn_KN150061v1 24048 unplaced primary NW_003336820.1,KN150061.1 chrUn_KN150062v1 35038 unplaced primary NW_003336370.1,KN150062.1 chrUn_KN150063v1 20846 unplaced primary NW_003335276.1,KN150063.1 chrUn_KN150064v1 14598 unplaced primary NW_003337176.1,KN150064.1 chrUn_KN150065v1 9859 unplaced primary NW_008805432.1,KN150065.1 chrUn_KN150066v1 29537 unplaced primary NW_003336574.1,KN150066.1 chrUn_KN150067v1 27325 unplaced primary NW_003336420.1,KN150067.1 chrUn_KN150068v1 62725 unplaced primary NW_003336525.1,KN150068.1 chrUn_KN150069v1 12799 unplaced primary NW_003336668.1,KN150069.1 chrUn_KN150070v1 14070 unplaced primary NW_008805433.1,KN150070.1 chrUn_KN150071v1 14960 unplaced primary NW_003336739.1,KN150071.1 chrUn_KN150072v1 13309 unplaced primary NW_003335332.2,KN150072.1 chrUn_KN150073v1 14052 unplaced primary NW_008805434.1,KN150073.1 chrUn_KN150074v1 28653 unplaced primary NW_003335891.1,KN150074.1 chrUn_KN150075v1 13883 unplaced primary NW_003335005.1,KN150075.1 chrUn_KN150076v1 14425 unplaced primary NW_003336326.1,KN150076.1 chrUn_KN150077v1 51360 unplaced primary NW_003336780.1,KN150077.1 chrUn_KN150078v1 12098 unplaced primary NW_003334214.1,KN150078.1 chrUn_KN150079v1 46800 unplaced primary NW_003336064.1,KN150079.1 chrUn_KN150080v1 37662 unplaced primary NW_003336501.1,KN150080.1 chrUn_KN150081v1 12836 unplaced primary NW_003336620.1,KN150081.1 chrUn_KN150082v1 8788 unplaced primary NW_003336755.1,KN150082.1 chrUn_KN150083v1 49514 unplaced primary NW_003337125.1,KN150083.1 chrUn_KN150084v1 24192 unplaced primary NW_003336468.1,KN150084.1 chrUn_KN150085v1 29177 unplaced primary NW_003334395.2,KN150085.1 chrUn_KN150086v1 1639 unplaced primary NW_003337228.1,KN150086.1 chrUn_KN150087v1 11020 unplaced primary NW_003337163.1,KN150087.1 chrUn_KN150088v1 24203 unplaced primary NW_003336639.1,KN150088.1 chrUn_KN150089v1 13104 unplaced primary NW_008805435.1,KN150089.1 chrUn_KN150090v1 12028 unplaced primary NW_003336362.1,KN150090.1 chrUn_KN150091v1 36410 unplaced primary NW_003334767.1,KN150091.1 chrUn_KN150092v1 14544 unplaced primary NW_003337253.1,KN150092.1 chrUn_KN150093v1 14738 unplaced primary NW_008805436.1,KN150093.1 chrUn_KN150094v1 7824 unplaced primary NW_008805437.1,KN150094.1 chrUn_KN150095v1 9204 unplaced primary NW_008805438.1,KN150095.1 chrUn_KN150096v1 11550 unplaced primary NW_008805439.1,KN150096.1 chrUn_KN150097v1 11690 unplaced primary NW_003336961.1,KN150097.1 chrUn_KN150098v1 68279 unplaced primary NW_003335654.1,KN150098.1 chrUn_KN150099v1 79937 unplaced primary NW_003337130.1,KN150099.1 chrUn_KN150100v1 9237 unplaced primary NW_003334852.2,KN150100.1 chrUn_KN150101v1 25174 unplaced primary NW_003335231.1,KN150101.1 chrUn_KN150102v1 34431 unplaced primary NW_003337197.1,KN150102.1 chrUn_KN150103v1 4090 unplaced primary NW_008805440.1,KN150103.1 chrUn_KN150104v1 53188 unplaced primary NW_003335567.1,KN150104.1 chrUn_KN150105v1 58062 unplaced primary NW_003337145.1,KN150105.1 chrUn_KN150106v1 56524 unplaced primary NW_003334032.1,KN150106.1 chrUn_KN150107v1 78223 unplaced primary NW_003336664.1,KN150107.1 chrUn_KN150108v1 19459 unplaced primary NW_003336241.2,KN150108.1 chrUn_KN150109v1 5564 unplaced primary NW_003335000.1,KN150109.1 chrUn_KN150110v1 9804 unplaced primary NW_003336548.1,KN150110.1 chrUn_KN150111v1 29931 unplaced primary NW_003335663.1,KN150111.1 chrUn_KN150112v1 3423 unplaced primary NW_003334114.1,KN150112.1 chrUn_KN150113v1 19310 unplaced primary NW_003336808.1,KN150113.1 chrUn_KN150114v1 24178 unplaced primary NW_003336645.1,KN150114.1 chrUn_KN150115v1 18676 unplaced primary NW_008805441.1,KN150115.1 chrUn_KN150116v1 15497 unplaced primary NW_003336506.1,KN150116.1 chrUn_KN150117v1 48543 unplaced primary NW_003336299.1,KN150117.1 chrUn_KN150118v1 54494 unplaced primary NW_003337121.1,KN150118.1 chrUn_KN150119v1 1143 unplaced primary NW_008805442.1,KN150119.1 chrUn_KN150120v1 27511 unplaced primary NW_008805443.1,KN150120.1 chrUn_KN150121v1 8447 unplaced primary NW_003337032.1,KN150121.1 chrUn_KN150122v1 67534 unplaced primary NW_003337033.1,KN150122.1 chrUn_KN150123v1 51978 unplaced primary NW_003334680.2,KN150123.1 chrUn_KN150124v1 27208 unplaced primary NW_003335791.1,KN150124.1 chrUn_KN150125v1 83315 unplaced primary NW_003337013.1,KN150125.1 chrUn_KN150126v1 24847 unplaced primary NW_003336385.1,KN150126.1 chrUn_KN150127v1 33302 unplaced primary NW_003336678.1,KN150127.1 chrUn_KN150128v1 12262 unplaced primary NW_003336812.1,KN150128.1 chrUn_KN150129v1 107891 unplaced primary NW_003337085.1,KN150129.1 chrUn_KN150130v1 9925 unplaced primary NW_008805444.1,KN150130.1 chrUn_KN150131v1 70868 unplaced primary NW_008805445.1,KN150131.1 chrUn_KN150132v1 13999 unplaced primary NW_003336900.1,KN150132.1 chrUn_KN150133v1 82225 unplaced primary NW_003334034.1,KN150133.1 chrUn_KN150134v1 29067 unplaced primary NW_003336226.1,KN150134.1 chrUn_KN150135v1 6944 unplaced primary NW_003334912.1,KN150135.1 chrUn_KN150136v1 49373 unplaced primary NW_003336484.1,KN150136.1 chrUn_KN150137v1 36779 unplaced primary NW_003336679.1,KN150137.1 chrUn_KN150138v1 14383 unplaced primary NW_003336688.1,KN150138.1 chrUn_KN150139v1 16647 unplaced primary NW_008805446.1,KN150139.1 chrUn_KN150140v1 32180 unplaced primary NW_003336878.2,KN150140.1 chrUn_KN150141v1 17117 unplaced primary NW_003335166.2,KN150141.1 chrUn_KN150142v1 16050 unplaced primary NW_003336182.2,KN150142.1 chrUn_KN150143v1 4977 unplaced primary NW_008805447.1,KN150143.1 chrUn_KN150144v1 14974 unplaced primary NW_003336479.1,KN150144.1 chrUn_KN150145v1 9970 unplaced primary NW_008805448.1,KN150145.1 chrUn_KN150146v1 9714 unplaced primary NW_003337126.1,KN150146.1 chrUn_KN150147v1 7977 unplaced primary NW_003335184.2,KN150147.1 chrUn_KN150148v1 44589 unplaced primary NW_003337040.2,KN150148.1 chrUn_KN150149v1 3784 unplaced primary NW_003336789.1,KN150149.1 chrUn_KN150150v1 9780 unplaced primary NW_008805449.1,KN150150.1 chrUn_KN150151v1 27317 unplaced primary NW_003336908.1,KN150151.1 chrUn_KN150152v1 9348 unplaced primary NW_008805450.1,KN150152.1 chrUn_KN150153v1 1545 unplaced primary NW_003334841.1,KN150153.1 chrUn_KN150154v1 21695 unplaced primary NW_003335322.1,KN150154.1 chrUn_KN150155v1 10282 unplaced primary NW_008805451.1,KN150155.1 chrUn_KN150156v1 33247 unplaced primary NW_003337259.1,KN150156.1 chrUn_KN150157v1 18756 unplaced primary NW_003337224.1,KN150157.1 chrUn_KN150158v1 106536 unplaced primary NW_003335383.2,KN150158.1 chrUn_KN150159v1 35229 unplaced primary NW_003337196.1,KN150159.1 chrUn_KN150160v1 17824 unplaced primary NW_003336286.1,KN150160.1 chrUn_KN150161v1 12647 unplaced primary NW_008805452.1,KN150161.1 chrUn_KN150162v1 10930 unplaced primary NW_003336381.1,KN150162.1 chrUn_KN150163v1 1082 unplaced primary NW_008805453.1,KN150163.1 chrUn_KN150164v1 11300 unplaced primary NW_003335796.1,KN150164.1 chrUn_KN150165v1 32739 unplaced primary NW_003336925.1,KN150165.1 chrUn_KN150166v1 49457 unplaced primary NW_003336541.1,KN150166.1 chrUn_KN150167v1 13466 unplaced primary NW_003336392.1,KN150167.1 chrUn_KN150168v1 28382 unplaced primary NW_003336254.1,KN150168.1 chrUn_KN150169v1 7260 unplaced primary NW_003334119.1,KN150169.1 chrUn_KN150170v1 55716 unplaced primary NW_003336404.2,KN150170.1 chrUn_KN150171v1 140649 unplaced primary NW_003336964.1,KN150171.1 chrUn_KN150172v1 40634 unplaced primary NW_008805454.1,KN150172.1 chrUn_KN150173v1 50946 unplaced primary NW_003336455.2,KN150173.1 chrUn_KN150174v1 13450 unplaced primary NW_008805455.1,KN150174.1 chrUn_KN150175v1 24612 unplaced primary NW_003337250.1,KN150175.1 chrUn_KN150176v1 69061 unplaced primary NW_003334499.2,KN150176.1 chrUn_KN150177v1 21670 unplaced primary NW_003336928.1,KN150177.1 chrUn_KN150178v1 28040 unplaced primary NW_003336606.2,KN150178.1 chrUn_KN150179v1 47473 unplaced primary NW_003336461.1,KN150179.1 chrUn_KN150180v1 1872 unplaced primary NW_003337031.1,KN150180.1 chrUn_KN150181v1 32761 unplaced primary NW_003335920.1,KN150181.1 chrUn_KN150182v1 11735 unplaced primary NW_003337162.1,KN150182.1 chrUn_KN150183v1 22266 unplaced primary NW_003334281.1,KN150183.1 chrUn_KN150184v1 16312 unplaced primary NW_003336327.1,KN150184.1 chrUn_KN150185v1 8651 unplaced primary NW_003336293.1,KN150185.1 chrUn_KN150186v1 23923 unplaced primary NW_003334071.2,KN150186.1 chrUn_KN150187v1 19179 unplaced primary NW_003336328.1,KN150187.1 chrUn_KN150188v1 9856 unplaced primary NW_008805456.1,KN150188.1 chrUn_KN150189v1 38868 unplaced primary NW_003336699.1,KN150189.1 chrUn_KN150190v1 11399 unplaced primary NW_003336858.1,KN150190.1 chrUn_KN150191v1 42303 unplaced primary NW_003334899.1,KN150191.1 chrUn_KN150192v1 1918 unplaced primary NW_008805457.1,KN150192.1 chrUn_KN150193v1 12580 unplaced primary NW_003336332.1,KN150193.1 chrUn_KN150194v1 13629 unplaced primary NW_003336375.1,KN150194.1 chrUn_KN150195v1 18921 unplaced primary NW_003336913.1,KN150195.1 chrUn_KN150196v1 89077 unplaced primary NW_008805458.1,KN150196.1 chrUn_KN150197v1 14532 unplaced primary NW_003337171.1,KN150197.1 chrUn_KN150198v1 18196 unplaced primary NW_003336446.1,KN150198.1 chrUn_KN150199v1 16564 unplaced primary NW_003336871.1,KN150199.1 chrUn_KN150200v1 31861 unplaced primary NW_008805459.1,KN150200.1 chrUn_KN150201v1 9480 unplaced primary NW_003336661.1,KN150201.1 chrUn_KN150202v1 15451 unplaced primary NW_003337002.1,KN150202.1 chrUn_KN150203v1 24004 unplaced primary NW_003337189.1,KN150203.1 chrUn_KN150204v1 95149 unplaced primary NW_003337204.1,KN150204.1 chrUn_KN150205v1 2620 unplaced primary NW_003337172.1,KN150205.1 chrUn_KN150206v1 2052 unplaced primary NW_003336388.1,KN150206.1 chrUn_KN150207v1 117821 unplaced primary NW_003335281.1,KN150207.1 chrUn_KN150208v1 33163 unplaced primary NW_003336930.1,KN150208.1 chrUn_KN150209v1 4398 unplaced primary NW_008805460.1,KN150209.1 chrUn_KN150210v1 12550 unplaced primary NW_003337136.1,KN150210.1 chrUn_KN150211v1 16386 unplaced primary NW_003336376.1,KN150211.1 chrUn_KN150212v1 18932 unplaced primary NW_003335408.1,KN150212.1 chrUn_KN150213v1 16101 unplaced primary NW_008805461.1,KN150213.1 chrUn_KN150214v1 162877 unplaced primary NW_003336732.1,KN150214.1 chrUn_KN150215v1 1237 unplaced primary NW_003334517.2,KN150215.1 chrUn_KN150216v1 1020 unplaced primary NW_008805462.1,KN150216.1 chrUn_KN150217v1 13840 unplaced primary NW_008805463.1,KN150217.1 chrUn_KN150218v1 15354 unplaced primary NW_003336601.1,KN150218.1 chrUn_KN150219v1 16672 unplaced primary NW_003336553.1,KN150219.1 chrUn_KN150220v1 29625 unplaced primary NW_003335052.1,KN150220.1 chrUn_KN150221v1 28122 unplaced primary NW_003336895.1,KN150221.1 chrUn_KN150222v1 110669 unplaced primary NW_003336730.1,KN150222.1 chrUn_KN150223v1 1141 unplaced primary NW_008805464.1,KN150223.1 chrUn_KN150224v1 24154 unplaced primary NW_003335355.2,KN150224.1 chrUn_KN150225v1 20429 unplaced primary NW_008805465.1,KN150225.1 chrUn_KN150226v1 25293 unplaced primary NW_003334453.1,KN150226.1 chrUn_KN150227v1 31979 unplaced primary NW_003336903.1,KN150227.1 chrUn_KN150228v1 17061 unplaced primary NW_003337202.1,KN150228.1 chrUn_KN150229v1 1251 unplaced primary NW_003336632.1,KN150229.1 chrUn_KN150230v1 149710 unplaced primary NW_003335764.1,KN150230.1 chrUn_KN150231v1 2322 unplaced primary NW_008805466.1,KN150231.1 chrUn_KN150232v1 53540 unplaced primary NW_003336350.1,KN150232.1 chrUn_KN150233v1 2246 unplaced primary NW_003336429.1,KN150233.1 chrUn_KN150234v1 18511 unplaced primary NW_003336769.1,KN150234.1 chrUn_KN150235v1 13664 unplaced primary NW_008805467.1,KN150235.1 chrUn_KN150236v1 19315 unplaced primary NW_008805468.1,KN150236.1 chrUn_KN150237v1 1732 unplaced primary NW_003336914.1,KN150237.1 chrUn_KN150238v1 9450 unplaced primary NW_003336515.1,KN150238.1 chrUn_KN150239v1 33607 unplaced primary NW_003337230.1,KN150239.1 chrUn_KN150240v1 31723 unplaced primary NW_003335884.2,KN150240.1 chrUn_KN150241v1 60821 unplaced primary NW_003336647.1,KN150241.1 chrUn_KN150242v1 20063 unplaced primary NW_003334219.2,KN150242.1 chrUn_KN150243v1 44953 unplaced primary NW_003336949.2,KN150243.1 chrUn_KN150244v1 42860 unplaced primary NW_003336894.1,KN150244.1 chrUn_KN150245v1 8814 unplaced primary NW_008805469.1,KN150245.1 chrUn_KN150246v1 15365 unplaced primary NW_008805470.1,KN150246.1 chrUn_KN150247v1 728 unplaced primary NW_008805471.1,KN150247.1 chrUn_KN150248v1 18273 unplaced primary NW_003337198.1,KN150248.1 chrUn_KN150249v1 12261 unplaced primary NW_003336377.1,KN150249.1 chrUn_KN150250v1 13560 unplaced primary NW_008805472.1,KN150250.1 chrUn_KN150251v1 26988 unplaced primary NW_008805473.1,KN150251.1 chrUn_KN150252v1 43133 unplaced primary NW_003334150.2,KN150252.1 chrUn_KN150253v1 3149 unplaced primary NW_003336972.2,KN150253.1 chrUn_KN150254v1 12144 unplaced primary NW_003336921.1,KN150254.1 chrUn_KN150255v1 36661 unplaced primary NW_003336517.1,KN150255.1 chrUn_KN150256v1 17390 unplaced primary NW_003336356.1,KN150256.1 chrUn_KN150257v1 12735 unplaced primary NW_003336819.1,KN150257.1 chrUn_KN150258v1 95885 unplaced primary NW_003337070.1,KN150258.1 chrUn_KN150259v1 50098 unplaced primary NW_003336396.1,KN150259.1 chrUn_KN150260v1 12318 unplaced primary NW_003337096.1,KN150260.1 chrUn_KN150261v1 5601 unplaced primary NW_008805474.1,KN150261.1 chrUn_KN150262v1 81659 unplaced primary NW_008805475.1,KN150262.1 chrUn_KN150263v1 31336 unplaced primary NW_003336283.1,KN150263.1 chrUn_KN150264v1 16955 unplaced primary NW_003334519.2,KN150264.1 chrUn_KN150265v1 51555 unplaced primary NW_003335278.1,KN150265.1 chrUn_KN150266v1 78263 unplaced primary NW_003336232.1,KN150266.1 chrUn_KN150267v1 77778 unplaced primary NW_003337203.1,KN150267.1 chrUn_KN150268v1 15280 unplaced primary NW_008805476.1,KN150268.1 chrUn_KN150269v1 48062 unplaced primary NW_003336662.1,KN150269.1 chrUn_KN150270v1 22285 unplaced primary NW_003337159.1,KN150270.1 chrUn_KN150271v1 12637 unplaced primary NW_003336846.1,KN150271.1 chrUn_KN150272v1 34295 unplaced primary NW_003336573.1,KN150272.1 chrUn_KN150273v1 81940 unplaced primary NW_003335280.1,KN150273.1 chrUn_KN150274v1 12247 unplaced primary NW_003336884.1,KN150274.1 chrUn_KN150275v1 13800 unplaced primary NW_003336488.1,KN150275.1 chrUn_KN150276v1 12942 unplaced primary NW_003336666.1,KN150276.1 chrUn_KN150277v1 1954 unplaced primary NW_008805477.1,KN150277.1 chrUn_KN150278v1 30978 unplaced primary NW_003337101.1,KN150278.1 chrUn_KN150279v1 11402 unplaced primary NW_003337080.1,KN150279.1 chrUn_KN150280v1 10487 unplaced primary NW_008805478.1,KN150280.1 chrUn_KN150281v1 3763 unplaced primary NW_008805479.1,KN150281.1 chrUn_KN150282v1 23758 unplaced primary NW_003336036.1,KN150282.1 chrUn_KN150283v1 13933 unplaced primary NW_008805480.1,KN150283.1 chrUn_KN150284v1 18131 unplaced primary NW_003336443.1,KN150284.1 chrUn_KN150285v1 25361 unplaced primary NW_003334203.1,KN150285.1 chrUn_KN150286v1 9068 unplaced primary NW_008805481.1,KN150286.1 chrUn_KN150287v1 11856 unplaced primary NW_003337239.1,KN150287.1 chrUn_KN150288v1 12496 unplaced primary NW_008805482.1,KN150288.1 chrUn_KN150289v1 22206 unplaced primary NW_003336437.1,KN150289.1 chrUn_KN150290v1 18248 unplaced primary NW_003337065.1,KN150290.1 chrUn_KN150291v1 25796 unplaced primary NW_003336764.1,KN150291.1 chrUn_KN150292v1 9984 unplaced primary NW_003337025.1,KN150292.1 chrUn_KN150293v1 40764 unplaced primary NW_008805483.1,KN150293.1 chrUn_KN150294v1 1627 unplaced primary NW_008805484.1,KN150294.1 chrUn_KN150295v1 5486 unplaced primary NW_008805485.1,KN150295.1 chrUn_KN150296v1 10238 unplaced primary NW_003336834.1,KN150296.1 chrUn_KN150297v1 23472 unplaced primary NW_003337028.1,KN150297.1 chrUn_KN150298v1 1322 unplaced primary NW_008805486.1,KN150298.1 chrUn_KN150299v1 23511 unplaced primary NW_003337154.1,KN150299.1 chrUn_KN150300v1 9489 unplaced primary NW_003336674.1,KN150300.1 chrUn_KN150301v1 18664 unplaced primary NW_003336572.2,KN150301.1 chrUn_KN150302v1 13538 unplaced primary NW_008805487.1,KN150302.1 chrUn_KN150303v1 39288 unplaced primary NW_008805488.1,KN150303.1 chrUn_KN150304v1 10004 unplaced primary NW_008805489.1,KN150304.1 chrUn_KN150305v1 23261 unplaced primary NW_003336298.1,KN150305.1 chrUn_KN150306v1 36728 unplaced primary NW_003336603.1,KN150306.1 chrUn_KN150307v1 9167 unplaced primary NW_003336554.1,KN150307.1 chrUn_KN150308v1 18907 unplaced primary NW_003337131.2,KN150308.1 chrUn_KN150309v1 20999 unplaced primary NW_003336529.1,KN150309.1 chrUn_KN150310v1 20509 unplaced primary NW_008805490.1,KN150310.1 chrUn_KN150311v1 15747 unplaced primary NW_003337042.1,KN150311.1 chrUn_KN150312v1 17282 unplaced primary NW_008805491.1,KN150312.1 chrUn_KN150313v1 20655 unplaced primary NW_003336176.2,KN150313.1 chrUn_KN150314v1 12455 unplaced primary NW_003337059.1,KN150314.1 chrUn_KN150315v1 20424 unplaced primary NW_003337219.1,KN150315.1 chrUn_KN150316v1 11489 unplaced primary NW_008805492.1,KN150316.1 chrUn_KN150317v1 14866 unplaced primary NW_008805493.1,KN150317.1 chrUn_KN150318v1 2580 unplaced primary NW_008805494.1,KN150318.1 chrUn_KN150319v1 15807 unplaced primary NW_003336810.1,KN150319.1 chrUn_KN150320v1 1241 unplaced primary NW_008805495.1,KN150320.1 chrUn_KN150321v1 3079 unplaced primary NW_008805496.1,KN150321.1 chrUn_KN150322v1 19644 unplaced primary NW_008805497.1,KN150322.1 chrUn_KN150323v1 18137 unplaced primary NW_003336675.1,KN150323.1 chrUn_KN150324v1 24032 unplaced primary NW_003334033.1,KN150324.1 chrUn_KN150325v1 19525 unplaced primary NW_003336599.1,KN150325.1 chrUn_KN150326v1 109565 unplaced primary NW_003336663.1,KN150326.1 chrUn_KN150327v1 19949 unplaced primary NW_008805498.1,KN150327.1 chrUn_KN150328v1 17410 unplaced primary NW_003336978.1,KN150328.1 chrUn_KN150329v1 13297 unplaced primary NW_003337127.1,KN150329.1 chrUn_KN150330v1 28440 unplaced primary NW_003334988.2,KN150330.1 chrUn_KN150331v1 44968 unplaced primary NW_003336940.1,KN150331.1 chrUn_KN150332v1 22862 unplaced primary NW_003336784.1,KN150332.1 chrUn_KN150333v1 12275 unplaced primary NW_003335050.1,KN150333.1 chrUn_KN150334v1 22542 unplaced primary NW_003336876.1,KN150334.1 chrUn_KN150335v1 44504 unplaced primary NW_003337117.1,KN150335.1 chrUn_KN150336v1 48672 unplaced primary NW_003334683.1,KN150336.1 chrUn_KN150337v1 20260 unplaced primary NW_003336442.1,KN150337.1 chrUn_KN150338v1 1142 unplaced primary NW_003336815.1,KN150338.1 chrUn_KN150339v1 75108 unplaced primary NW_003334369.1,KN150339.1 chrUn_KN150340v1 28741 unplaced primary NW_003334670.1,KN150340.1 chrUn_KN150341v1 31147 unplaced primary NW_003337182.1,KN150341.1 chrUn_KN150342v1 82590 unplaced primary NW_003335650.1,KN150342.1 chrUn_KN150343v1 26928 unplaced primary NW_003336806.1,KN150343.1 chrUn_KN150344v1 19681 unplaced primary NW_008805499.1,KN150344.1 chrUn_KN150345v1 17012 unplaced primary NW_003337008.2,KN150345.1 chrUn_KN150346v1 70538 unplaced primary NW_003336813.1,KN150346.1 chrUn_KN150347v1 51528 unplaced primary NW_003336513.1,KN150347.1 chrUn_KN150348v1 42704 unplaced primary NW_003336418.1,KN150348.1 chrUn_KN150349v1 29114 unplaced primary NW_003336956.1,KN150349.1 chrUn_KN150350v1 9245 unplaced primary NW_003336410.1,KN150350.1 chrUn_KN150351v1 49608 unplaced primary NW_003336758.1,KN150351.1 chrUn_KN150352v1 15907 unplaced primary NW_003336681.1,KN150352.1 chrUn_KN150353v1 19631 unplaced primary NW_003336715.1,KN150353.1 chrUn_KN150354v1 1452 unplaced primary NW_003336475.1,KN150354.1 chrUn_KN150355v1 6731 unplaced primary NW_003337006.1,KN150355.1 chrUn_KN150356v1 1177 unplaced primary NW_008805500.1,KN150356.1 chrUn_KN150357v1 27326 unplaced primary NW_003337192.1,KN150357.1 chrUn_KN150358v1 9951 unplaced primary NW_008805501.1,KN150358.1 chrUn_KN150359v1 71383 unplaced primary NW_003337027.1,KN150359.1 chrUn_KN150360v1 15639 unplaced primary NW_003336934.1,KN150360.1 chrUn_KN150361v1 53624 unplaced primary NW_008805502.1,KN150361.1 chrUn_KN150362v1 17145 unplaced primary NW_003336636.1,KN150362.1 chrUn_KN150363v1 22766 unplaced primary NW_003336387.2,KN150363.1 chrUn_KN150364v1 15084 unplaced primary NW_003336746.1,KN150364.1 chrUn_KN150365v1 10769 unplaced primary NW_008805503.1,KN150365.1 chrUn_KN150366v1 10057 unplaced primary NW_003336766.1,KN150366.1 chrUn_KN150367v1 1114 unplaced primary NW_008805504.1,KN150367.1 chrUn_KN150368v1 18491 unplaced primary NW_003336088.1,KN150368.1 chrUn_KN150369v1 11460 unplaced primary NW_003336929.1,KN150369.1 chrUn_KN150370v1 1323 unplaced primary NW_008805505.1,KN150370.1 chrUn_KN150371v1 13836 unplaced primary NW_003336374.1,KN150371.1 chrUn_KN150372v1 29560 unplaced primary NW_003337097.1,KN150372.1 chrUn_KN150373v1 13130 unplaced primary NW_003336391.1,KN150373.1 chrUn_KN150374v1 9775 unplaced primary NW_003336772.2,KN150374.1 chrUn_KN150375v1 111208 unplaced primary NW_008805506.1,KN150375.1 chrUn_KN150376v1 39971 unplaced primary NW_008805507.1,KN150376.1 chrUn_KN150377v1 5727 unplaced primary NW_003334718.1,KN150377.1 chrUn_KN150378v1 4206 unplaced primary NW_003337102.1,KN150378.1 chrUn_KN150379v1 29907 unplaced primary NW_003336918.1,KN150379.1 chrUn_KN150380v1 12144 unplaced primary NW_003337115.1,KN150380.1 chrUn_KN150381v1 8595 unplaced primary NW_003336129.1,KN150381.1 chrUn_KN150382v1 14074 unplaced primary NW_003336287.1,KN150382.1 chrUn_KN150383v1 7777 unplaced primary NW_003335266.1,KN150383.1 chrUn_KN150384v1 22969 unplaced primary NW_003337193.1,KN150384.1 chrUn_KN150385v1 37055 unplaced primary NW_003335289.1,KN150385.1 chrUn_KN150386v1 35900 unplaced primary NW_003337183.1,KN150386.1 chrUn_KN150387v1 15215 unplaced primary NW_003336845.1,KN150387.1 chrUn_KN150388v1 22284 unplaced primary NW_008805508.1,KN150388.1 chrUn_KN150389v1 10334 unplaced primary NW_008805509.1,KN150389.1 chrUn_KN150390v1 19066 unplaced primary NW_003336331.2,KN150390.1 chrUn_KN150391v1 26543 unplaced primary NW_003335573.1,KN150391.1 chrUn_KN150392v1 12069 unplaced primary NW_003336185.1,KN150392.1 chrUn_KN150393v1 12073 unplaced primary NW_008805510.1,KN150393.1 chrUn_KN150394v1 17139 unplaced primary NW_003337222.1,KN150394.1 chrUn_KN150395v1 9792 unplaced primary NW_003336361.1,KN150395.1 chrUn_KN150396v1 8176 unplaced primary NW_003337207.1,KN150396.1 chrUn_KN150397v1 17295 unplaced primary NW_003336593.1,KN150397.1 chrUn_KN150398v1 39557 unplaced primary NW_003336425.1,KN150398.1 chrUn_KN150399v1 19362 unplaced primary NW_003337242.1,KN150399.1 chrUn_KN150400v1 34930 unplaced primary NW_003337146.1,KN150400.1 chrUn_KN150401v1 10081 unplaced primary NW_003336665.1,KN150401.1 chrUn_KN150402v1 47971 unplaced primary NW_003336537.1,KN150402.1 chrUn_KN150403v1 34697 unplaced primary NW_003336855.1,KN150403.1 chrUn_KN150404v1 18160 unplaced primary NW_008805511.1,KN150404.1 chrUn_KN150405v1 76919 unplaced primary NW_003335907.1,KN150405.1 chrUn_KN150406v1 17215 unplaced primary NW_003334182.1,KN150406.1 chrUn_KN150407v1 31814 unplaced primary NW_003336727.1,KN150407.1 chrUn_KN150408v1 37191 unplaced primary NW_003337083.1,KN150408.1 chrUn_KN150409v1 1729 unplaced primary NW_008805512.1,KN150409.1 chrUn_KN150410v1 14841 unplaced primary NW_008805513.1,KN150410.1 chrUn_KN150411v1 20886 unplaced primary NW_003336533.1,KN150411.1 chrUn_KN150412v1 9605 unplaced primary NW_008805514.1,KN150412.1 chrUn_KN150413v1 15078 unplaced primary NW_003337251.1,KN150413.1 chrUn_KN150414v1 35871 unplaced primary NW_003337046.1,KN150414.1 chrUn_KN150415v1 70574 unplaced primary NW_003336416.1,KN150415.1 chrUn_KN150416v1 33835 unplaced primary NW_003337161.1,KN150416.1 chrUn_KN150417v1 2254 unplaced primary NW_008805515.1,KN150417.1 chrUn_KN150418v1 14930 unplaced primary NW_008805516.1,KN150418.1 chrUn_KN150419v1 14114 unplaced primary NW_003337233.1,KN150419.1 chrUn_KN150420v1 14290 unplaced primary NW_008805517.1,KN150420.1 chrUn_KN150421v1 14951 unplaced primary NW_003336994.1,KN150421.1 chrUn_KN150422v1 15053 unplaced primary NW_003336621.1,KN150422.1 chrUn_KN150423v1 15221 unplaced primary NW_003336672.2,KN150423.1 chrUn_KN150424v1 11928 unplaced primary NW_008805518.1,KN150424.1 chrUn_KN150425v1 110593 unplaced primary NW_003336436.1,KN150425.1 chrUn_KN150426v1 21499 unplaced primary NW_003334448.1,KN150426.1 chrUn_KN150427v1 45580 unplaced primary NW_008805519.1,KN150427.1 chrUn_KN150428v1 29216 unplaced primary NW_003336422.1,KN150428.1 chrUn_KN150429v1 17683 unplaced primary NW_003337045.1,KN150429.1 chrUn_KN150430v1 16452 unplaced primary NW_003336966.1,KN150430.1 chrUn_KN150431v1 89659 unplaced primary NW_003336510.1,KN150431.1 chrUn_KN150432v1 91010 unplaced primary NW_003336612.1,KN150432.1 chrUn_KN150433v1 8322 unplaced primary NW_008805520.1,KN150433.1 chrUn_KN150434v1 12053 unplaced primary NW_003336824.1,KN150434.1 chrUn_KN150435v1 123991 unplaced primary NW_003334548.2,KN150435.1 chrUn_KN150436v1 17739 unplaced primary NW_003336998.2,KN150436.1 chrUn_KN150437v1 1262 unplaced primary NW_003335163.1,KN150437.1 chrUn_KN150438v1 7619 unplaced primary NW_008805521.1,KN150438.1 chrUn_KN150439v1 10343 unplaced primary NW_003337068.1,KN150439.1 chrUn_KN150440v1 1193 unplaced primary NW_003334844.1,KN150440.1 chrUn_KN150441v1 12439 unplaced primary NW_003336324.1,KN150441.1 chrUn_KN150442v1 67738 unplaced primary NW_003336589.1,KN150442.1 chrUn_KN150443v1 11834 unplaced primary NW_003337088.1,KN150443.1 chrUn_KN150444v1 11830 unplaced primary NW_003336989.1,KN150444.1 chrUn_KN150445v1 12072 unplaced primary NW_008805522.1,KN150445.1 chrUn_KN150446v1 12446 unplaced primary NW_008805523.1,KN150446.1 chrUn_KN150447v1 6779 unplaced primary NW_008805524.1,KN150447.1 chrUn_KN150448v1 3709 unplaced primary NW_008805525.1,KN150448.1 chrUn_KN150449v1 62607 unplaced primary NW_008805526.1,KN150449.1 chrUn_KN150450v1 25362 unplaced primary NW_008805527.1,KN150450.1 chrUn_KN150451v1 14920 unplaced primary NW_008805528.1,KN150451.1 chrUn_KN150452v1 8345 unplaced primary NW_003336441.1,KN150452.1 chrUn_KN150453v1 13591 unplaced primary NW_008805529.1,KN150453.1 chrUn_KN150454v1 18479 unplaced primary NW_003337265.1,KN150454.1 chrUn_KN150455v1 73536 unplaced primary NW_003337116.1,KN150455.1 chrUn_KN150456v1 76246 unplaced primary NW_003336453.1,KN150456.1 chrUn_KN150457v1 1076 unplaced primary NW_008805530.1,KN150457.1 chrUn_KN150458v1 17481 unplaced primary NW_003337124.1,KN150458.1 chrUn_KN150459v1 45603 unplaced primary NW_003337132.1,KN150459.1 chrUn_KN150460v1 266772 unplaced primary NW_003335395.1,KN150460.1 chrUn_KN150461v1 1000 unplaced primary NW_008805531.1,KN150461.1 chrUn_KN150462v1 24623 unplaced primary NW_003334810.2,KN150462.1 chrUn_KN150463v1 29963 unplaced primary NW_003336512.1,KN150463.1 chrUn_KN150464v1 24865 unplaced primary NW_003337179.1,KN150464.1 chrUn_KN150465v1 1765 unplaced primary NW_008805532.1,KN150465.1 chrUn_KN150466v1 41319 unplaced primary NW_003336897.1,KN150466.1 chrUn_KN150467v1 11202 unplaced primary NW_008805533.1,KN150467.1 chrUn_KN150468v1 25381 unplaced primary NW_003336414.1,KN150468.1 chrUn_KN150469v1 14614 unplaced primary NW_003336514.1,KN150469.1 chrUn_KN150470v1 2027 unplaced primary NW_003335559.1,KN150470.1 chrUn_KN150471v1 76663 unplaced primary NW_003335375.1,KN150471.1 chrUn_KN150472v1 14586 unplaced primary NW_003337034.1,KN150472.1 chrUn_KN150473v1 1285 unplaced primary NW_008805534.1,KN150473.1 chrUn_KN150474v1 312116 unplaced primary NW_003337016.1,KN150474.1 chrUn_KN150475v1 17517 unplaced primary NW_003335148.1,KN150475.1 chrUn_KN150476v1 59211 unplaced primary NW_003336445.1,KN150476.1 chrUn_KN150477v1 61693 unplaced primary NW_003337143.1,KN150477.1 chrUn_KN150478v1 25813 unplaced primary NW_003336671.1,KN150478.1 chrUn_KN150479v1 48186 unplaced primary NW_008805535.1,KN150479.1 chrUn_KN150480v1 1422 unplaced primary NW_008805536.1,KN150480.1 chrUn_KN150481v1 1008 unplaced primary NW_003334506.1,KN150481.1 chrUn_KN150482v1 14895 unplaced primary NW_008805537.1,KN150482.1 chrUn_KN150483v1 17332 unplaced primary NW_003337177.1,KN150483.1 chrUn_KN150484v1 14965 unplaced primary NW_003334956.2,KN150484.1 chrUn_KN150485v1 7348 unplaced primary NW_003337187.1,KN150485.1 chrUn_KN150486v1 8572 unplaced primary NW_008805538.1,KN150486.1 chrUn_KN150487v1 123701 unplaced primary NW_003336534.1,KN150487.1 chrUn_KN150488v1 17582 unplaced primary NW_003336507.1,KN150488.1 chrUn_KN150489v1 26739 unplaced primary NW_003336591.1,KN150489.1 chrUn_KN150490v1 23057 unplaced primary NW_008805539.1,KN150490.1 chrUn_KN150491v1 13001 unplaced primary NW_008805540.1,KN150491.1 chrUn_KN150492v1 31617 unplaced primary NW_003337261.1,KN150492.1 chrUn_KN150493v1 35575 unplaced primary NW_003336563.1,KN150493.1 chrUn_KN150494v1 10108 unplaced primary NW_003336347.1,KN150494.1 chrUn_KN150495v1 28160 unplaced primary NW_003336321.1,KN150495.1 chrUn_KN150496v1 21062 unplaced primary NW_003337150.1,KN150496.1 chrUn_KN150497v1 46188 unplaced primary NW_003336641.1,KN150497.1 chrUn_KN150498v1 34205 unplaced primary NW_003335577.1,KN150498.1 chrUn_KN150499v1 11840 unplaced primary NW_003336729.1,KN150499.1 chrUn_KN150500v1 19866 unplaced primary NW_003336968.1,KN150500.1 chrUn_KN150501v1 22392 unplaced primary NW_003334575.1,KN150501.1 chrUn_KN150502v1 13027 unplaced primary NW_008805541.1,KN150502.1 chrUn_KN150503v1 1834 unplaced primary NW_003336687.2,KN150503.1 chrUn_KN150504v1 12094 unplaced primary NW_003337122.1,KN150504.1 chrUn_KN150505v1 39265 unplaced primary NW_008805542.1,KN150505.1 chrUn_KN150506v1 14319 unplaced primary NW_008805543.1,KN150506.1 chrUn_KN150507v1 12629 unplaced primary NW_003336962.2,KN150507.1 chrUn_KN150508v1 26814 unplaced primary NW_003337071.1,KN150508.1 chrUn_KN150509v1 11846 unplaced primary NW_008805544.1,KN150509.1 chrUn_KN150510v1 13237 unplaced primary NW_003336872.1,KN150510.1 chrUn_KN150511v1 38183 unplaced primary NW_003337218.1,KN150511.1 chrUn_KN150512v1 14003 unplaced primary NW_003336733.1,KN150512.1 chrUn_KN150513v1 10220 unplaced primary NW_003336451.1,KN150513.1 chrUn_KN150514v1 19391 unplaced primary NW_003336893.1,KN150514.1 chrUn_KN150515v1 1813 unplaced primary NW_003336686.1,KN150515.1 chrUn_KN150516v1 49339 unplaced primary NW_003335321.1,KN150516.1 chrUn_KN150517v1 16171 unplaced primary NW_003336995.1,KN150517.1 chrUn_KN150518v1 40394 unplaced primary NW_008805545.1,KN150518.1 chrUn_KN150519v1 11974 unplaced primary NW_003336494.1,KN150519.1 chrUn_KN150520v1 103159 unplaced primary NW_003334254.1,KN150520.1 chrUn_KN150521v1 20896 unplaced primary NW_003337266.1,KN150521.1 chrUn_KN150522v1 12046 unplaced primary NW_003336169.1,KN150522.1 chrUn_KN150523v1 19004 unplaced primary NW_003336403.1,KN150523.1 chrUn_KN150524v1 9948 unplaced primary NW_008805546.1,KN150524.1 chrUn_KN150525v1 650 unplaced primary NW_003336558.1,KN150525.1 chrUn_KN150526v1 15513 unplaced primary NW_003336311.1,KN150526.1 chrUn_KN150527v1 20880 unplaced primary NW_003336627.1,KN150527.1 chrUn_KN150528v1 13138 unplaced primary NW_003336655.1,KN150528.1 chrUn_KN150529v1 81946 unplaced primary NW_003335906.1,KN150529.1 chrUn_KN150530v1 7299 unplaced primary NW_003336511.1,KN150530.1 chrUn_KN150531v1 15090 unplaced primary NW_008805547.1,KN150531.1 chrUn_KN150532v1 21602 unplaced primary NW_003336781.2,KN150532.1 chrUn_KN150533v1 1222 unplaced primary NW_008805548.1,KN150533.1 chrUn_KN150534v1 17661 unplaced primary NW_003337106.1,KN150534.1 chrUn_KN150535v1 2315 unplaced primary NW_008805549.1,KN150535.1 chrUn_KN150536v1 17908 unplaced primary NW_003336520.1,KN150536.1 chrUn_KN150537v1 27568 unplaced primary NW_003336426.1,KN150537.1 chrUn_KN150538v1 12119 unplaced primary NW_003337019.1,KN150538.1 chrUn_KN150539v1 23246 unplaced primary NW_003336783.1,KN150539.1 chrUn_KN150540v1 15288 unplaced primary NW_003336701.2,KN150540.1 chrUn_KN150541v1 12323 unplaced primary NW_003336946.1,KN150541.1 chrUn_KN150542v1 12167 unplaced primary NW_003336583.1,KN150542.1 chrUn_KN150543v1 2343 unplaced primary NW_003335154.1,KN150543.1 chrUn_KN150544v1 1198 unplaced primary NW_003337120.1,KN150544.1 chrUn_KN150545v1 17546 unplaced primary NW_003336473.1,KN150545.1 chrUn_KN150546v1 10851 unplaced primary NW_008805550.1,KN150546.1 chrUn_KN150547v1 37420 unplaced primary NW_003337043.1,KN150547.1 chrUn_KN150548v1 46061 unplaced primary NW_003336435.2,KN150548.1 chrUn_KN150549v1 17599 unplaced primary NW_008805551.1,KN150549.1 chrUn_KN150550v1 14915 unplaced primary NW_008805552.1,KN150550.1 chrUn_KN150551v1 9435 unplaced primary NW_003336399.1,KN150551.1 chrUn_KN150552v1 74050 unplaced primary NW_003334318.1,KN150552.1 chrUn_KN150553v1 14032 unplaced primary NW_003336237.1,KN150553.1 chrUn_KN150554v1 9251 unplaced primary NW_003336448.1,KN150554.1 chrUn_KN150555v1 9941 unplaced primary NW_008805553.1,KN150555.1 chrUn_KN150556v1 9286 unplaced primary NW_003336975.1,KN150556.1 chrUn_KN150557v1 41459 unplaced primary NW_003336471.1,KN150557.1 chrUn_KN150558v1 12115 unplaced primary NW_003336684.1,KN150558.1 chrUn_KN150559v1 26580 unplaced primary NW_003336341.1,KN150559.1 chrUn_KN150560v1 2301 unplaced primary NW_003336300.2,KN150560.1 chrUn_KN150561v1 22238 unplaced primary NW_003335113.1,KN150561.1 chrUn_KN150562v1 22875 unplaced primary NW_003336996.1,KN150562.1 chrUn_KN150563v1 11540 unplaced primary NW_008805554.1,KN150563.1 chrUn_KN150564v1 17709 unplaced primary NW_003336398.1,KN150564.1 chrUn_KN150565v1 20464 unplaced primary NW_003336308.1,KN150565.1 chrUn_KN150566v1 39318 unplaced primary NW_003334077.1,KN150566.1 chrUn_KN150567v1 49566 unplaced primary NW_003336976.1,KN150567.1 chrUn_KN150568v1 108195 unplaced primary NW_003336276.1,KN150568.1 chrUn_KN150569v1 24359 unplaced primary NW_003336754.1,KN150569.1 chrUn_KN150570v1 42279 unplaced primary NW_003335350.1,KN150570.1 chrUn_KN150571v1 16505 unplaced primary NW_003336924.1,KN150571.1 chrUn_KN150572v1 28871 unplaced primary NW_003336559.1,KN150572.1 chrUn_KN150573v1 26604 unplaced primary NW_003336747.1,KN150573.1 chrUn_KN150574v1 18499 unplaced primary NW_003337151.1,KN150574.1 chrUn_KN150575v1 11084 unplaced primary NW_003336892.1,KN150575.1 chrUn_KN150576v1 36129 unplaced primary NW_003337260.1,KN150576.1 chrUn_KN150577v1 13719 unplaced primary NW_003336742.1,KN150577.1 chrUn_KN150578v1 103698 unplaced primary NW_003336492.1,KN150578.1 chrUn_KN150579v1 23586 unplaced primary NW_003336493.1,KN150579.1 chrUn_KN150580v1 32349 unplaced primary NW_003336274.1,KN150580.1 chrUn_KN150581v1 12355 unplaced primary NW_003337107.1,KN150581.1 chrUn_KN150582v1 12396 unplaced primary NW_003336907.1,KN150582.1 chrUn_KN150583v1 1918 unplaced primary NW_008805555.1,KN150583.1 chrUn_KN150584v1 51535 unplaced primary NW_008805556.1,KN150584.1 chrUn_KN150585v1 12430 unplaced primary NW_003336630.1,KN150585.1 chrUn_KN150586v1 17388 unplaced primary NW_008805557.1,KN150586.1 chrUn_KN150587v1 8461 unplaced primary NW_008805558.1,KN150587.1 chrUn_KN150588v1 14103 unplaced primary NW_003336773.1,KN150588.1 chrUn_KN150589v1 18957 unplaced primary NW_003334902.1,KN150589.1 chrUn_KN150590v1 5798 unplaced primary NW_003336166.1,KN150590.1 chrUn_KN150591v1 8817 unplaced primary NW_003336888.1,KN150591.1 chrUn_KN150592v1 50000 unplaced primary NW_003335319.1,KN150592.1 chrUn_KN150593v1 14353 unplaced primary NW_003334536.1,KN150593.1 chrUn_KN150594v1 19382 unplaced primary NW_003336521.1,KN150594.1 chrUn_KN150595v1 12507 unplaced primary NW_008805559.1,KN150595.1 chrUn_KN150596v1 60847 unplaced primary NW_003336991.1,KN150596.1 chrUn_KN150597v1 2137 unplaced primary NW_008805560.1,KN150597.1 chrUn_KN150598v1 12499 unplaced primary NW_003336762.1,KN150598.1 chrUn_KN150599v1 19019 unplaced primary NW_003336836.1,KN150599.1 chrUn_KN150600v1 32636 unplaced primary NW_003335880.2,KN150600.1 chrUn_KN150601v1 11167 unplaced primary NW_008805561.1,KN150601.1 chrUn_KN150602v1 22730 unplaced primary NW_003336682.1,KN150602.1 chrUn_KN150603v1 98280 unplaced primary NW_003336757.1,KN150603.1 chrUn_KN150604v1 25236 unplaced primary NW_003335007.1,KN150604.1 chrUn_KN150605v1 102574 unplaced primary NW_003336579.1,KN150605.1 chrUn_KN150606v1 51696 unplaced primary NW_003336826.1,KN150606.1 chrUn_KN150607v1 9531 unplaced primary NW_003336325.1,KN150607.1 chrUn_KN150608v1 149650 unplaced primary NW_003335359.2,KN150608.1 chrUn_KN150609v1 37413 unplaced primary NW_003336840.1,KN150609.1 chrUn_KN150610v1 10565 unplaced primary NW_003336302.1,KN150610.1 chrUn_KN150611v1 1697 unplaced primary NW_008805562.1,KN150611.1 chrUn_KN150612v1 2865 unplaced primary NW_003336939.1,KN150612.1 chrUn_KN150613v1 15739 unplaced primary NW_003336721.1,KN150613.1 chrUn_KN150614v1 9019 unplaced primary NW_008805563.1,KN150614.1 chrUn_KN150615v1 9878 unplaced primary NW_008805564.1,KN150615.1 chrUn_KN150616v1 88699 unplaced primary NW_003336543.1,KN150616.1 chrUn_KN150617v1 90208 unplaced primary NW_003335385.1,KN150617.1 chrUn_KN150618v1 64127 unplaced primary NW_003334455.1,KN150618.1 chrUn_KN150619v1 41925 unplaced primary NW_003336277.2,KN150619.1 chrUn_KN150620v1 30729 unplaced primary NW_003336997.1,KN150620.1 chrUn_KN150621v1 1204 unplaced primary NW_003335146.1,KN150621.1 chrUn_KN150622v1 15811 unplaced primary NW_003336614.1,KN150622.1 chrUn_KN150623v1 1126 unplaced primary NW_003337225.1,KN150623.1 chrUn_KN150624v1 18713 unplaced primary NW_003335889.1,KN150624.1 chrUn_KN150625v1 22486 unplaced primary NW_003336372.1,KN150625.1 chrUn_KN150626v1 32850 unplaced primary NW_003336568.1,KN150626.1 chrUn_KN150627v1 26060 unplaced primary NW_008805565.1,KN150627.1 chrUn_KN150628v1 33906 unplaced primary NW_008805566.1,KN150628.1 chrUn_KN150629v1 19604 unplaced primary NW_003334261.1,KN150629.1 chrUn_KN150630v1 86421 unplaced primary NW_003336337.1,KN150630.1 chrUn_KN150631v1 36324 unplaced primary NW_003335149.2,KN150631.1 chrUn_KN150632v1 11627 unplaced primary NW_003336725.1,KN150632.1 chrUn_KN150633v1 19558 unplaced primary NW_003335143.1,KN150633.1 chrUn_KN150634v1 16020 unplaced primary NW_003334668.1,KN150634.1 chrUn_KN150635v1 27947 unplaced primary NW_008805567.1,KN150635.1 chrUn_KN150636v1 20513 unplaced primary NW_008805568.1,KN150636.1 chrUn_KN150637v1 39689 unplaced primary NW_008805569.1,KN150637.1 chrUn_KN150638v1 39727 unplaced primary NW_003336706.1,KN150638.1 chrUn_KN150639v1 27620 unplaced primary NW_003336281.1,KN150639.1 chrUn_KN150640v1 20890 unplaced primary NW_003337057.1,KN150640.1 chrUn_KN150641v1 14778 unplaced primary NW_003335935.1,KN150641.1 chrUn_KN150642v1 55536 unplaced primary NW_003335314.1,KN150642.1 chrUn_KN150643v1 28088 unplaced primary NW_003336958.1,KN150643.1 chrUn_KN150644v1 20534 unplaced primary NW_008805570.1,KN150644.1 chrUn_KN150645v1 22839 unplaced primary NW_003336613.1,KN150645.1 chrUn_KN150646v1 78076 unplaced primary NW_003336358.1,KN150646.1 chrUn_KN150647v1 14938 unplaced primary NW_008805571.1,KN150647.1 chrUn_KN150648v1 2077 unplaced primary NW_008805572.1,KN150648.1 chrUn_KN150649v1 81249 unplaced primary NW_003336843.1,KN150649.1 chrUn_KN150650v1 3012 unplaced primary NW_003336973.1,KN150650.1 chrUn_KN150651v1 28018 unplaced primary NW_003337123.1,KN150651.1 chrUn_KN150652v1 18075 unplaced primary NW_003336743.1,KN150652.1 chrUn_KN150653v1 55997 unplaced primary NW_008805573.1,KN150653.1 chrUn_KN150654v1 18414 unplaced primary NW_008805574.1,KN150654.1 chrUn_KN150655v1 8089 unplaced primary NW_008805575.1,KN150655.1 chrUn_KN150656v1 28006 unplaced primary NW_003336774.2,KN150656.1 chrUn_KN150657v1 1007 unplaced primary NW_008805576.1,KN150657.1 chrUn_KN150658v1 90387 unplaced primary NW_003336386.1,KN150658.1 chrUn_KN150659v1 11827 unplaced primary NW_003334429.1,KN150659.1 chrUn_KN150660v1 13470 unplaced primary NW_008805577.1,KN150660.1 chrUn_KN150661v1 26250 unplaced primary NW_003334452.1,KN150661.1 chrUn_KN150662v1 17820 unplaced primary NW_003336355.1,KN150662.1 chrUn_KN150663v1 88608 unplaced primary NW_003337060.1,KN150663.1 chrUn_KN150664v1 9590 unplaced primary NW_003336740.1,KN150664.1 chrUn_KN150665v1 11944 unplaced primary NW_003337186.1,KN150665.1 chrUn_KN150666v1 63484 unplaced primary NW_003336407.1,KN150666.1 chrUn_KN150667v1 54201 unplaced primary NW_003336566.1,KN150667.1 chrUn_KN150668v1 21856 unplaced primary NW_003336756.1,KN150668.1 chrUn_KN150669v1 15325 unplaced primary NW_003336850.1,KN150669.1 chrUn_KN150670v1 77993 unplaced primary NW_003335386.2,KN150670.1 chrUn_KN150671v1 13526 unplaced primary NW_003337038.1,KN150671.1 chrUn_KN150672v1 107610 unplaced primary NW_003334334.2,KN150672.1 chrUn_KN150673v1 3357 unplaced primary NW_008805578.1,KN150673.1 chrUn_KN150674v1 13959 unplaced primary NW_003337135.1,KN150674.1 chrUn_KN150675v1 41858 unplaced primary NW_003337029.1,KN150675.1 chrUn_KN150676v1 51674 unplaced primary NW_003336294.1,KN150676.1 chrUn_KN150677v1 66956 unplaced primary NW_008805579.1,KN150677.1 chrUn_KN150678v1 7552 unplaced primary NW_003337026.1,KN150678.1 chrUn_KN150679v1 14065 unplaced primary NW_003336847.1,KN150679.1 chrUn_KN150680v1 13379 unplaced primary NW_003334441.1,KN150680.1 chrUn_KN150681v1 279222 unplaced primary NW_003335315.1,KN150681.1 chrUn_KN150682v1 15190 unplaced primary NW_003337188.1,KN150682.1 chrUn_KN150683v1 16822 unplaced primary NW_003334692.2,KN150683.1 chrUn_KN150684v1 24053 unplaced primary NW_003337255.1,KN150684.1 chrUn_KN150685v1 13309 unplaced primary NW_003336523.1,KN150685.1 chrUn_KN150686v1 11947 unplaced primary NW_003336791.1,KN150686.1 chrUn_KN150687v1 13294 unplaced primary NW_008805580.1,KN150687.1 chrUn_KN150688v1 1917 unplaced primary NW_003334086.1,KN150688.1 chrUn_KN150689v1 19550 unplaced primary NW_003336343.1,KN150689.1 chrUn_KN150690v1 26145 unplaced primary NW_003337041.1,KN150690.1 chrUn_KN150691v1 184625 unplaced primary NW_003336957.1,KN150691.1 chrUn_KN150692v1 12590 unplaced primary NW_003336157.1,KN150692.1 chrUn_KN150693v1 2190 unplaced primary NW_008805581.1,KN150693.1 chrUn_KN150694v1 13510 unplaced primary NW_003336798.1,KN150694.1 chrUn_KN150695v1 14840 unplaced primary NW_003335605.1,KN150695.1 chrUn_KN150696v1 29565 unplaced primary NW_003334029.1,KN150696.1 chrUn_KN150697v1 12709 unplaced primary NW_003336278.1,KN150697.1 chrUn_KN150698v1 31983 unplaced primary NW_003335800.1,KN150698.1 chrUn_KN150699v1 26100 unplaced primary NW_003334027.1,KN150699.1 chrUn_KN150700v1 79542 unplaced primary NW_008805582.1,KN150700.1 chrUn_KN150701v1 1133 unplaced primary NW_003335530.1,KN150701.1 chrUn_KN150702v1 212296 unplaced primary NW_003334319.1,KN150702.1 chrUn_KN150703v1 48009 unplaced primary NW_003336712.1,KN150703.1 chrUn_KN150704v1 1233 unplaced primary NW_008805583.1,KN150704.1 chrUn_KN150705v1 16373 unplaced primary NW_003336478.1,KN150705.1 chrUn_KN150706v1 8278 unplaced primary NW_008805584.1,KN150706.1 chrUn_KN150707v1 16938 unplaced primary NW_003336556.1,KN150707.1 chrUn_KN150708v1 42677 unplaced primary NW_008805585.1,KN150708.1 chrUn_KN150709v1 65370 unplaced primary NW_003337165.1,KN150709.1 chrUn_KN150710v1 19629 unplaced primary NW_003337075.1,KN150710.1 chrUn_KN150711v1 11940 unplaced primary NW_003336651.1,KN150711.1 chrUn_KN150712v1 79012 unplaced primary NW_003336549.2,KN150712.1 chrUn_KN150713v1 14579 unplaced primary NW_003336760.1,KN150713.1 open2c-bioframe-4fe9b25/bioframe/io/data/danRer11.seqinfo.tsv000066400000000000000000002014431477525772300240150ustar00rootroot00000000000000name length role molecule unit aliases chr1 59578282 assembled chr1 primary 1,CM002885.2,NC_007112.7 chr2 59640629 assembled chr2 primary 2,CM002886.2,NC_007113.7 chr3 62628489 assembled chr3 primary 3,CM002887.2,NC_007114.7 chr4 78093715 assembled chr4 primary 4,CM002888.2,NC_007115.7 chr5 72500376 assembled chr5 primary 5,CM002889.2,NC_007116.7 chr6 60270059 assembled chr6 primary 6,CM002890.2,NC_007117.7 chr7 74282399 assembled chr7 primary 7,CM002891.2,NC_007118.7 chr8 54304671 assembled chr8 primary 8,CM002892.2,NC_007119.7 chr9 56459846 assembled chr9 primary 9,CM002893.2,NC_007120.7 chr10 45420867 assembled chr10 primary 10,CM002894.2,NC_007121.7 chr11 45484837 assembled chr11 primary 11,CM002895.2,NC_007122.7 chr12 49182954 assembled chr12 primary 12,CM002896.2,NC_007123.7 chr13 52186027 assembled chr13 primary 13,CM002897.2,NC_007124.7 chr14 52660232 assembled chr14 primary 14,CM002898.2,NC_007125.7 chr15 48040578 assembled chr15 primary 15,CM002899.2,NC_007126.7 chr16 55266484 assembled chr16 primary 16,CM002900.2,NC_007127.7 chr17 53461100 assembled chr17 primary 17,CM002901.2,NC_007128.7 chr18 51023478 assembled chr18 primary 18,CM002902.2,NC_007129.7 chr19 48449771 assembled chr19 primary 19,CM002903.2,NC_007130.7 chr20 55201332 assembled chr20 primary 20,CM002904.2,NC_007131.7 chr21 45934066 assembled chr21 primary 21,CM002905.2,NC_007132.7 chr22 39133080 assembled chr22 primary 22,CM002906.2,NC_007133.7 chr23 46223584 assembled chr23 primary 23,CM002907.2,NC_007134.7 chr24 42172926 assembled chr24 primary 24,CM002908.2,NC_007135.7 chr25 37502051 assembled chr25 primary 25,CM002909.2,NC_007136.7 chrM 16596 assembled chrM non-nuclear MT,AC024175.3,NC_002333.2 chrUn_KN147552v2 24373 unplaced primary KN147552.2,NW_003334243.2 chrUn_KN147632v2 184438 unplaced primary KN147632.2,NW_003336270.3 chrUn_KN147636v1 203829 unplaced primary KN147636.1,NW_001884452.4 chrUn_KN147637v2 171924 unplaced primary KN147637.2,NW_001884473.4 chrUn_KN147642v2 204646 unplaced primary KN147642.2,NW_001878780.5 chrUn_KN147651v2 351968 unplaced primary KN147651.2,NW_003040715.4 chrUn_KN147652v2 252640 unplaced primary KN147652.2,NW_001884533.5 chrUn_KN148038v2 17585 unplaced primary KN148038.2,NW_003334681.2 chrUn_KN148828v2 13322 unplaced primary KN148828.2,NW_003335484.2 chrUn_KN148869v2 18523 unplaced primary KN148869.2,NW_003335528.3 chrUn_KN149680v1 38724 unplaced primary KN149680.1,NW_003336264.2 chrUn_KN149682v1 137468 unplaced primary KN149682.1,NW_001878251.4 chrUn_KN149683v1 152860 unplaced primary KN149683.1,NW_001884381.4 chrUn_KN149684v1 159057 unplaced primary KN149684.1,NW_001878128.4 chrUn_KN149685v1 164780 unplaced primary KN149685.1,NW_001884386.4 chrUn_KN149686v1 260365 unplaced primary KN149686.1,NW_003044888.3 chrUn_KN149687v1 165668 unplaced primary KN149687.1,NW_001884400.4 chrUn_KN149688v2 252035 unplaced primary KN149688.2,NW_001878118.5 chrUn_KN149689v2 201817 unplaced primary KN149689.2,NW_001879289.5 chrUn_KN149690v1 343018 unplaced primary KN149690.1,NW_001884413.3 chrUn_KN149691v1 233193 unplaced primary KN149691.1,NW_001884427.4 chrUn_KN149692v1 36911 unplaced primary KN149692.1,NW_001884442.4 chrUn_KN149693v1 49295 unplaced primary KN149693.1,NW_001884441.4 chrUn_KN149694v1 162759 unplaced primary KN149694.1,NW_001884444.4 chrUn_KN149695v1 190731 unplaced primary KN149695.1,NW_003039389.3 chrUn_KN149696v2 368252 unplaced primary KN149696.2,NW_003039384.4 chrUn_KN149697v1 40969 unplaced primary KN149697.1,NW_008805346.1 chrUn_KN149698v1 108577 unplaced primary KN149698.1,NW_008805347.1 chrUn_KN149700v1 40050 unplaced primary KN149700.1,NW_003337144.1 chrUn_KN149701v1 3760 unplaced primary KN149701.1,NW_008805348.1 chrUn_KN149702v1 100325 unplaced primary KN149702.1,NW_008805349.1 chrUn_KN149703v1 13902 unplaced primary KN149703.1,NW_003336866.1 chrUn_KN149705v1 27926 unplaced primary KN149705.1,NW_003336598.1 chrUn_KN149706v1 33279 unplaced primary KN149706.1,NW_003336851.1 chrUn_KN149707v2 7455 unplaced primary KN149707.2,NW_008805351.2 chrUn_KN149708v1 20567 unplaced primary KN149708.1,NW_003337018.1 chrUn_KN149709v1 27814 unplaced primary KN149709.1,NW_003336433.1 chrUn_KN149710v1 50974 unplaced primary KN149710.1,NW_003335779.1 chrUn_KN149711v1 11473 unplaced primary KN149711.1,NW_003336950.1 chrUn_KN149713v1 10094 unplaced primary KN149713.1,NW_008805353.1 chrUn_KN149714v1 74622 unplaced primary KN149714.1,NW_003337205.1 chrUn_KN149715v1 19020 unplaced primary KN149715.1,NW_003336714.2 chrUn_KN149716v1 42229 unplaced primary KN149716.1,NW_003334619.1 chrUn_KN149717v1 47589 unplaced primary KN149717.1,NW_003337229.1 chrUn_KN149718v1 65247 unplaced primary KN149718.1,NW_003336716.1 chrUn_KN149719v1 47531 unplaced primary KN149719.1,NW_003337263.1 chrUn_KN149720v1 10211 unplaced primary KN149720.1,NW_008805354.1 chrUn_KN149721v1 25462 unplaced primary KN149721.1,NW_003336827.1 chrUn_KN149722v1 13397 unplaced primary KN149722.1,NW_003336457.1 chrUn_KN149723v1 55784 unplaced primary KN149723.1,NW_003337194.1 chrUn_KN149724v1 11849 unplaced primary KN149724.1,NW_003336519.1 chrUn_KN149725v1 69829 unplaced primary KN149725.1,NW_003336869.1 chrUn_KN149727v1 24871 unplaced primary KN149727.1,NW_003336152.2 chrUn_KN149728v1 9442 unplaced primary KN149728.1,NW_003336547.1 chrUn_KN149729v1 5608 unplaced primary KN149729.1,NW_008805356.1 chrUn_KN149730v1 14804 unplaced primary KN149730.1,NW_003336623.1 chrUn_KN149732v1 16041 unplaced primary KN149732.1,NW_003336490.1 chrUn_KN149733v1 21637 unplaced primary KN149733.1,NW_003336868.1 chrUn_KN149735v1 5747 unplaced primary KN149735.1,NW_008805358.1 chrUn_KN149737v1 27700 unplaced primary KN149737.1,NW_003336345.1 chrUn_KN149738v1 10603 unplaced primary KN149738.1,NW_003337254.2 chrUn_KN149739v1 51610 unplaced primary KN149739.1,NW_003336823.1 chrUn_KN149740v1 1265 unplaced primary KN149740.1,NW_003334432.1 chrUn_KN149741v1 21941 unplaced primary KN149741.1,NW_003337078.1 chrUn_KN149742v1 2671 unplaced primary KN149742.1,NW_003336474.1 chrUn_KN149743v1 21023 unplaced primary KN149743.1,NW_003336724.1 chrUn_KN149745v1 8150 unplaced primary KN149745.1,NW_003337249.1 chrUn_KN149746v1 10900 unplaced primary KN149746.1,NW_008805361.1 chrUn_KN149747v1 16275 unplaced primary KN149747.1,NW_003336980.1 chrUn_KN149748v1 96570 unplaced primary KN149748.1,NW_003336540.1 chrUn_KN149749v1 40089 unplaced primary KN149749.1,NW_003336941.1 chrUn_KN149750v1 13928 unplaced primary KN149750.1,NW_003336571.1 chrUn_KN149751v1 15848 unplaced primary KN149751.1,NW_003336649.1 chrUn_KN149753v1 30249 unplaced primary KN149753.1,NW_003336977.1 chrUn_KN149754v1 40214 unplaced primary KN149754.1,NW_003336969.1 chrUn_KN149755v1 11941 unplaced primary KN149755.1,NW_003337240.1 chrUn_KN149756v1 11785 unplaced primary KN149756.1,NW_003337114.1 chrUn_KN149757v1 16145 unplaced primary KN149757.1,NW_003334832.2 chrUn_KN149758v1 9515 unplaced primary KN149758.1,NW_003336859.1 chrUn_KN149760v1 46605 unplaced primary KN149760.1,NW_003336744.1 chrUn_KN149761v1 14795 unplaced primary KN149761.1,NW_003336095.2 chrUn_KN149762v1 17936 unplaced primary KN149762.1,NW_008805363.1 chrUn_KN149763v1 19644 unplaced primary KN149763.1,NW_003336711.1 chrUn_KN149764v1 19831 unplaced primary KN149764.1,NW_003337091.2 chrUn_KN149765v1 29197 unplaced primary KN149765.1,NW_003336801.1 chrUn_KN149766v1 14664 unplaced primary KN149766.1,NW_003336970.1 chrUn_KN149767v1 30874 unplaced primary KN149767.1,NW_003337044.1 chrUn_KN149768v1 17671 unplaced primary KN149768.1,NW_003336765.1 chrUn_KN149769v1 53048 unplaced primary KN149769.1,NW_003337010.1 chrUn_KN149770v1 12046 unplaced primary KN149770.1,NW_003337047.1 chrUn_KN149771v1 14151 unplaced primary KN149771.1,NW_003336986.1 chrUn_KN149772v1 13273 unplaced primary KN149772.1,NW_003337052.1 chrUn_KN149774v1 12337 unplaced primary KN149774.1,NW_003336170.1 chrUn_KN149775v2 26074 unplaced primary KN149775.2,NW_003334589.2 chrUn_KN149777v1 1553 unplaced primary KN149777.1,NW_008805364.1 chrUn_KN149778v1 111598 unplaced primary KN149778.1,NW_003337175.1 chrUn_KN149779v1 21664 unplaced primary KN149779.1,NW_003334443.1 chrUn_KN149780v1 19718 unplaced primary KN149780.1,NW_003334404.1 chrUn_KN149782v1 36097 unplaced primary KN149782.1,NW_003337232.1 chrUn_KN149783v1 11892 unplaced primary KN149783.1,NW_003336802.1 chrUn_KN149784v1 73829 unplaced primary KN149784.1,NW_003337109.1 chrUn_KN149785v1 1577 unplaced primary KN149785.1,NW_003336582.1 chrUn_KN149786v1 1745 unplaced primary KN149786.1,NW_008805365.1 chrUn_KN149787v1 39794 unplaced primary KN149787.1,NW_003335933.1 chrUn_KN149788v1 8794 unplaced primary KN149788.1,NW_008805366.1 chrUn_KN149789v1 12990 unplaced primary KN149789.1,NW_003337184.1 chrUn_KN149790v1 115850 unplaced primary KN149790.1,NW_003336877.1 chrUn_KN149791v1 17273 unplaced primary KN149791.1,NW_003336635.1 chrUn_KN149792v1 11232 unplaced primary KN149792.1,NW_003337069.1 chrUn_KN149793v1 13298 unplaced primary KN149793.1,NW_008805367.1 chrUn_KN149794v1 25440 unplaced primary KN149794.1,NW_008805368.1 chrUn_KN149795v1 34615 unplaced primary KN149795.1,NW_003336860.1 chrUn_KN149796v1 25635 unplaced primary KN149796.1,NW_003336550.1 chrUn_KN149797v1 102101 unplaced primary KN149797.1,NW_003334026.1 chrUn_KN149798v1 1990 unplaced primary KN149798.1,NW_003336837.1 chrUn_KN149800v1 42049 unplaced primary KN149800.1,NW_008805369.1 chrUn_KN149801v1 4454 unplaced primary KN149801.1,NW_003336889.1 chrUn_KN149803v1 16018 unplaced primary KN149803.1,NW_003337090.1 chrUn_KN149804v1 10148 unplaced primary KN149804.1,NW_003337095.1 chrUn_KN149805v1 12432 unplaced primary KN149805.1,NW_003336290.1 chrUn_KN149806v1 15157 unplaced primary KN149806.1,NW_008805370.1 chrUn_KN149807v1 12512 unplaced primary KN149807.1,NW_003334875.1 chrUn_KN149809v1 2001 unplaced primary KN149809.1,NW_003336915.1 chrUn_KN149810v1 15043 unplaced primary KN149810.1,NW_003336919.1 chrUn_KN149811v1 8720 unplaced primary KN149811.1,NW_003336886.1 chrUn_KN149812v1 51419 unplaced primary KN149812.1,NW_003336288.1 chrUn_KN149813v1 59009 unplaced primary KN149813.1,NW_003336509.1 chrUn_KN149814v1 25878 unplaced primary KN149814.1,NW_003334686.1 chrUn_KN149815v1 33337 unplaced primary KN149815.1,NW_003334684.1 chrUn_KN149816v1 10128 unplaced primary KN149816.1,NW_003335521.2 chrUn_KN149817v1 11116 unplaced primary KN149817.1,NW_003337049.1 chrUn_KN149818v1 25942 unplaced primary KN149818.1,NW_003335384.1 chrUn_KN149819v1 10210 unplaced primary KN149819.1,NW_008805371.1 chrUn_KN149822v1 2460 unplaced primary KN149822.1,NW_003336643.1 chrUn_KN149823v1 14034 unplaced primary KN149823.1,NW_003335161.1 chrUn_KN149824v1 2357 unplaced primary KN149824.1,NW_003336698.1 chrUn_KN149825v1 22128 unplaced primary KN149825.1,NW_003336761.1 chrUn_KN149826v1 90482 unplaced primary KN149826.1,NW_003336654.1 chrUn_KN149827v1 13555 unplaced primary KN149827.1,NW_008805373.1 chrUn_KN149828v1 11414 unplaced primary KN149828.1,NW_003336660.1 chrUn_KN149829v1 27323 unplaced primary KN149829.1,NW_003335757.1 chrUn_KN149832v1 12483 unplaced primary KN149832.1,NW_003336959.1 chrUn_KN149834v1 17343 unplaced primary KN149834.1,NW_003337098.1 chrUn_KN149835v1 25861 unplaced primary KN149835.1,NW_003334814.2 chrUn_KN149836v1 34954 unplaced primary KN149836.1,NW_003335691.1 chrUn_KN149837v1 8007 unplaced primary KN149837.1,NW_003336667.1 chrUn_KN149838v1 29025 unplaced primary KN149838.1,NW_003337138.1 chrUn_KN149839v1 12998 unplaced primary KN149839.1,NW_003336838.1 chrUn_KN149840v1 46864 unplaced primary KN149840.1,NW_003336831.1 chrUn_KN149841v1 10085 unplaced primary KN149841.1,NW_003336073.1 chrUn_KN149843v1 33258 unplaced primary KN149843.1,NW_003336867.1 chrUn_KN149844v1 10201 unplaced primary KN149844.1,NW_003336430.1 chrUn_KN149846v1 28664 unplaced primary KN149846.1,NW_003336483.1 chrUn_KN149847v1 130903 unplaced primary KN149847.1,NW_003337258.1 chrUn_KN149848v1 10341 unplaced primary KN149848.1,NW_003336432.1 chrUn_KN149849v1 20421 unplaced primary KN149849.1,NW_008805378.1 chrUn_KN149850v1 33401 unplaced primary KN149850.1,NW_003337014.1 chrUn_KN149851v1 12094 unplaced primary KN149851.1,NW_003336419.1 chrUn_KN149852v1 30223 unplaced primary KN149852.1,NW_008805379.1 chrUn_KN149853v1 12817 unplaced primary KN149853.1,NW_003336917.1 chrUn_KN149854v1 6367 unplaced primary KN149854.1,NW_008805380.1 chrUn_KN149855v1 23165 unplaced primary KN149855.1,NW_003334236.1 chrUn_KN149856v1 35330 unplaced primary KN149856.1,NW_003334447.1 chrUn_KN149857v1 10132 unplaced primary KN149857.1,NW_008805381.1 chrUn_KN149859v1 53306 unplaced primary KN149859.1,NW_003336720.1 chrUn_KN149860v1 17408 unplaced primary KN149860.1,NW_003336315.1 chrUn_KN149861v1 14336 unplaced primary KN149861.1,NW_003336809.1 chrUn_KN149862v1 11987 unplaced primary KN149862.1,NW_003336301.1 chrUn_KN149863v1 11955 unplaced primary KN149863.1,NW_008805382.1 chrUn_KN149864v1 12929 unplaced primary KN149864.1,NW_008805383.1 chrUn_KN149865v1 49167 unplaced primary KN149865.1,NW_008805384.1 chrUn_KN149866v1 14752 unplaced primary KN149866.1,NW_003337099.1 chrUn_KN149867v1 1514 unplaced primary KN149867.1,NW_008805385.1 chrUn_KN149871v1 22553 unplaced primary KN149871.1,NW_003336239.1 chrUn_KN149872v1 12222 unplaced primary KN149872.1,NW_008805387.1 chrUn_KN149873v1 1146 unplaced primary KN149873.1,NW_008805388.1 chrUn_KN149874v1 5295 unplaced primary KN149874.1,NW_003335638.2 chrUn_KN149876v1 11298 unplaced primary KN149876.1,NW_003336849.1 chrUn_KN149878v1 7547 unplaced primary KN149878.1,NW_008805390.1 chrUn_KN149879v1 11893 unplaced primary KN149879.1,NW_003335459.1 chrUn_KN149880v1 64889 unplaced primary KN149880.1,NW_008805391.1 chrUn_KN149881v1 10736 unplaced primary KN149881.1,NW_008805392.1 chrUn_KN149882v1 7649 unplaced primary KN149882.1,NW_008805393.1 chrUn_KN149883v1 12434 unplaced primary KN149883.1,NW_003334215.1 chrUn_KN149884v1 51715 unplaced primary KN149884.1,NW_008805394.1 chrUn_KN149885v1 1347 unplaced primary KN149885.1,NW_003337168.1 chrUn_KN149887v1 11971 unplaced primary KN149887.1,NW_003336454.2 chrUn_KN149888v1 17117 unplaced primary KN149888.1,NW_003336349.1 chrUn_KN149889v1 10166 unplaced primary KN149889.1,NW_003336465.1 chrUn_KN149890v1 12029 unplaced primary KN149890.1,NW_003336424.1 chrUn_KN149892v1 24638 unplaced primary KN149892.1,NW_003336629.1 chrUn_KN149893v1 27995 unplaced primary KN149893.1,NW_003337247.1 chrUn_KN149895v1 92930 unplaced primary KN149895.1,NW_003334263.2 chrUn_KN149896v1 13102 unplaced primary KN149896.1,NW_003336289.1 chrUn_KN149897v1 14044 unplaced primary KN149897.1,NW_003336689.1 chrUn_KN149899v1 13632 unplaced primary KN149899.1,NW_003336497.1 chrUn_KN149900v1 11016 unplaced primary KN149900.1,NW_008805397.1 chrUn_KN149901v1 10512 unplaced primary KN149901.1,NW_003337164.1 chrUn_KN149903v1 11318 unplaced primary KN149903.1,NW_008805398.1 chrUn_KN149904v1 89156 unplaced primary KN149904.1,NW_003336333.2 chrUn_KN149905v1 14056 unplaced primary KN149905.1,NW_003336852.1 chrUn_KN149906v1 38987 unplaced primary KN149906.1,NW_003336751.1 chrUn_KN149907v1 9870 unplaced primary KN149907.1,NW_003337174.1 chrUn_KN149908v1 12800 unplaced primary KN149908.1,NW_003336848.1 chrUn_KN149909v1 40056 unplaced primary KN149909.1,NW_003336633.1 chrUn_KN149912v1 77979 unplaced primary KN149912.1,NW_003334245.1 chrUn_KN149913v1 16487 unplaced primary KN149913.1,NW_003337199.1 chrUn_KN149914v1 18241 unplaced primary KN149914.1,NW_003336354.1 chrUn_KN149915v1 10395 unplaced primary KN149915.1,NW_003336864.1 chrUn_KN149916v1 4293 unplaced primary KN149916.1,NW_003334505.1 chrUn_KN149917v1 3831 unplaced primary KN149917.1,NW_003335158.1 chrUn_KN149919v1 21073 unplaced primary KN149919.1,NW_003336948.1 chrUn_KN149921v1 28254 unplaced primary KN149921.1,NW_003336310.1 chrUn_KN149922v1 12529 unplaced primary KN149922.1,NW_008805400.1 chrUn_KN149923v1 36729 unplaced primary KN149923.1,NW_008805401.1 chrUn_KN149924v1 23395 unplaced primary KN149924.1,NW_003336874.1 chrUn_KN149925v1 29860 unplaced primary KN149925.1,NW_003336561.2 chrUn_KN149926v1 3688 unplaced primary KN149926.1,NW_003335249.1 chrUn_KN149927v1 11950 unplaced primary KN149927.1,NW_003335051.1 chrUn_KN149928v1 14297 unplaced primary KN149928.1,NW_003336610.1 chrUn_KN149931v1 6703 unplaced primary KN149931.1,NW_003335250.1 chrUn_KN149932v1 89521 unplaced primary KN149932.1,NW_003334672.2 chrUn_KN149933v1 13433 unplaced primary KN149933.1,NW_003336909.1 chrUn_KN149935v1 9230 unplaced primary KN149935.1,NW_003336782.1 chrUn_KN149936v1 16058 unplaced primary KN149936.1,NW_003337066.1 chrUn_KN149937v1 14110 unplaced primary KN149937.1,NW_003335043.1 chrUn_KN149938v1 12455 unplaced primary KN149938.1,NW_003335831.2 chrUn_KN149939v1 76611 unplaced primary KN149939.1,NW_003336586.1 chrUn_KN149940v1 11887 unplaced primary KN149940.1,NW_003336458.1 chrUn_KN149941v1 13607 unplaced primary KN149941.1,NW_003336575.1 chrUn_KN149943v1 29608 unplaced primary KN149943.1,NW_003334256.1 chrUn_KN149944v1 24909 unplaced primary KN149944.1,NW_003336415.1 chrUn_KN149946v1 33071 unplaced primary KN149946.1,NW_003336936.1 chrUn_KN149948v1 117499 unplaced primary KN149948.1,NW_003336703.1 chrUn_KN149949v1 64126 unplaced primary KN149949.1,NW_003336421.1 chrUn_KN149950v1 5952 unplaced primary KN149950.1,NW_003336979.1 chrUn_KN149951v1 5000 unplaced primary KN149951.1,NW_008805406.1 chrUn_KN149953v1 46218 unplaced primary KN149953.1,NW_003337062.1 chrUn_KN149955v1 19758 unplaced primary KN149955.1,NW_003336646.1 chrUn_KN149956v1 1889 unplaced primary KN149956.1,NW_008805408.1 chrUn_KN149957v1 1094 unplaced primary KN149957.1,NW_008805409.1 chrUn_KN149958v1 43073 unplaced primary KN149958.1,NW_003336942.1 chrUn_KN149959v1 59274 unplaced primary KN149959.1,NW_003336480.1 chrUn_KN149960v1 9235 unplaced primary KN149960.1,NW_003336389.1 chrUn_KN149961v1 20600 unplaced primary KN149961.1,NW_003337190.1 chrUn_KN149965v1 14790 unplaced primary KN149965.1,NW_003336066.1 chrUn_KN149967v1 8612 unplaced primary KN149967.1,NW_003335242.1 chrUn_KN149968v1 82990 unplaced primary KN149968.1,NW_003336650.1 chrUn_KN149969v1 13714 unplaced primary KN149969.1,NW_003336580.1 chrUn_KN149970v1 17511 unplaced primary KN149970.1,NW_003336817.2 chrUn_KN149971v1 11275 unplaced primary KN149971.1,NW_008805412.1 chrUn_KN149973v1 35555 unplaced primary KN149973.1,NW_003336937.1 chrUn_KN149974v1 19596 unplaced primary KN149974.1,NW_003336967.1 chrUn_KN149976v1 11858 unplaced primary KN149976.1,NW_003336371.1 chrUn_KN149977v2 11023 unplaced primary KN149977.2,NW_003337153.3 chrUn_KN149978v1 16801 unplaced primary KN149978.1,NW_003337086.1 chrUn_KN149979v1 22834 unplaced primary KN149979.1,NW_003336097.2 chrUn_KN149980v1 7980 unplaced primary KN149980.1,NW_008805415.1 chrUn_KN149981v1 12811 unplaced primary KN149981.1,NW_003337160.1 chrUn_KN149982v1 31814 unplaced primary KN149982.1,NW_003337139.1 chrUn_KN149983v1 17884 unplaced primary KN149983.1,NW_003336330.2 chrUn_KN149984v1 96477 unplaced primary KN149984.1,NW_003337241.1 chrUn_KN149988v1 9944 unplaced primary KN149988.1,NW_003336685.1 chrUn_KN149989v1 34480 unplaced primary KN149989.1,NW_003336748.2 chrUn_KN149990v1 57651 unplaced primary KN149990.1,NW_003337093.1 chrUn_KN149991v1 9871 unplaced primary KN149991.1,NW_003337156.1 chrUn_KN149992v1 57912 unplaced primary KN149992.1,NW_003336600.1 chrUn_KN149993v1 16921 unplaced primary KN149993.1,NW_003336466.1 chrUn_KN149995v1 12015 unplaced primary KN149995.1,NW_008805417.1 chrUn_KN149996v1 33528 unplaced primary KN149996.1,NW_003337137.1 chrUn_KN149997v1 6296 unplaced primary KN149997.1,NW_003336787.1 chrUn_KN149998v1 74724 unplaced primary KN149998.1,NW_003336316.1 chrUn_KN149999v1 14071 unplaced primary KN149999.1,NW_003336567.1 chrUn_KN150000v1 69737 unplaced primary KN150000.1,NW_003334656.2 chrUn_KN150002v1 17430 unplaced primary KN150002.1,NW_003336323.1 chrUn_KN150004v2 13059 unplaced primary KN150004.2,NW_003334666.3 chrUn_KN150005v1 34409 unplaced primary KN150005.1,NW_003336945.1 chrUn_KN150006v1 10518 unplaced primary KN150006.1,NW_003336825.1 chrUn_KN150007v1 13072 unplaced primary KN150007.1,NW_003336659.1 chrUn_KN150008v1 15572 unplaced primary KN150008.1,NW_003337256.1 chrUn_KN150009v1 17727 unplaced primary KN150009.1,NW_003336489.1 chrUn_KN150011v1 12995 unplaced primary KN150011.1,NW_003336777.1 chrUn_KN150012v1 11998 unplaced primary KN150012.1,NW_008805419.1 chrUn_KN150013v1 8488 unplaced primary KN150013.1,NW_003334233.2 chrUn_KN150014v1 13588 unplaced primary KN150014.1,NW_003337111.1 chrUn_KN150015v1 33441 unplaced primary KN150015.1,NW_003337220.1 chrUn_KN150016v1 21592 unplaced primary KN150016.1,NW_003335387.1 chrUn_KN150017v1 25636 unplaced primary KN150017.1,NW_003337217.1 chrUn_KN150018v1 1063 unplaced primary KN150018.1,NW_008805420.1 chrUn_KN150019v2 19834 unplaced primary KN150019.2,NW_003337129.2 chrUn_KN150020v1 11925 unplaced primary KN150020.1,NW_003336607.1 chrUn_KN150021v1 103967 unplaced primary KN150021.1,NW_003337037.1 chrUn_KN150022v1 76538 unplaced primary KN150022.1,NW_003336365.1 chrUn_KN150023v1 22153 unplaced primary KN150023.1,NW_003336353.1 chrUn_KN150024v1 1714 unplaced primary KN150024.1,NW_003336344.1 chrUn_KN150025v1 26343 unplaced primary KN150025.1,NW_003337067.1 chrUn_KN150028v1 19517 unplaced primary KN150028.1,NW_008805422.1 chrUn_KN150029v1 12415 unplaced primary KN150029.1,NW_008805423.1 chrUn_KN150030v1 57074 unplaced primary KN150030.1,NW_003336951.2 chrUn_KN150031v1 60899 unplaced primary KN150031.1,NW_003337200.1 chrUn_KN150032v1 29546 unplaced primary KN150032.1,NW_003336336.1 chrUn_KN150033v1 56448 unplaced primary KN150033.1,NW_003336670.1 chrUn_KN150034v1 1919 unplaced primary KN150034.1,NW_008805424.1 chrUn_KN150035v1 38086 unplaced primary KN150035.1,NW_003334265.1 chrUn_KN150037v1 2866 unplaced primary KN150037.1,NW_003336693.1 chrUn_KN150038v1 71326 unplaced primary KN150038.1,NW_003336974.1 chrUn_KN150039v1 3463 unplaced primary KN150039.1,NW_003335647.1 chrUn_KN150040v1 19896 unplaced primary KN150040.1,NW_008805426.1 chrUn_KN150041v2 66431 unplaced primary KN150041.2,NW_003334673.3 chrUn_KN150042v1 30789 unplaced primary KN150042.1,NW_003335185.2 chrUn_KN150043v1 31984 unplaced primary KN150043.1,NW_008805427.1 chrUn_KN150044v1 9097 unplaced primary KN150044.1,NW_003334669.1 chrUn_KN150045v2 10364 unplaced primary KN150045.2,NW_008805428.2 chrUn_KN150047v1 20749 unplaced primary KN150047.1,NW_003337234.1 chrUn_KN150048v1 128109 unplaced primary KN150048.1,NW_003336792.1 chrUn_KN150049v1 45008 unplaced primary KN150049.1,NW_003336830.1 chrUn_KN150051v1 1995 unplaced primary KN150051.1,NW_008805430.1 chrUn_KN150052v1 15943 unplaced primary KN150052.1,NW_003335153.1 chrUn_KN150054v1 16143 unplaced primary KN150054.1,NW_003336990.1 chrUn_KN150055v1 32561 unplaced primary KN150055.1,NW_003335922.2 chrUn_KN150056v1 29449 unplaced primary KN150056.1,NW_008805431.1 chrUn_KN150057v1 10736 unplaced primary KN150057.1,NW_003336282.1 chrUn_KN150058v1 21348 unplaced primary KN150058.1,NW_003336625.1 chrUn_KN150059v1 16588 unplaced primary KN150059.1,NW_003334628.1 chrUn_KN150060v1 80234 unplaced primary KN150060.1,NW_003336912.2 chrUn_KN150061v1 24048 unplaced primary KN150061.1,NW_003336820.1 chrUn_KN150062v1 35038 unplaced primary KN150062.1,NW_003336370.1 chrUn_KN150063v1 20846 unplaced primary KN150063.1,NW_003335276.1 chrUn_KN150064v1 14598 unplaced primary KN150064.1,NW_003337176.1 chrUn_KN150065v1 9859 unplaced primary KN150065.1,NW_008805432.1 chrUn_KN150066v1 29537 unplaced primary KN150066.1,NW_003336574.1 chrUn_KN150067v1 27325 unplaced primary KN150067.1,NW_003336420.1 chrUn_KN150068v1 62725 unplaced primary KN150068.1,NW_003336525.1 chrUn_KN150070v1 14070 unplaced primary KN150070.1,NW_008805433.1 chrUn_KN150071v1 14960 unplaced primary KN150071.1,NW_003336739.1 chrUn_KN150072v1 13309 unplaced primary KN150072.1,NW_003335332.2 chrUn_KN150073v1 14052 unplaced primary KN150073.1,NW_008805434.1 chrUn_KN150074v1 28653 unplaced primary KN150074.1,NW_003335891.1 chrUn_KN150076v1 14425 unplaced primary KN150076.1,NW_003336326.1 chrUn_KN150077v1 51360 unplaced primary KN150077.1,NW_003336780.1 chrUn_KN150078v1 12098 unplaced primary KN150078.1,NW_003334214.1 chrUn_KN150079v1 46800 unplaced primary KN150079.1,NW_003336064.1 chrUn_KN150080v1 37662 unplaced primary KN150080.1,NW_003336501.1 chrUn_KN150081v1 12836 unplaced primary KN150081.1,NW_003336620.1 chrUn_KN150082v1 8788 unplaced primary KN150082.1,NW_003336755.1 chrUn_KN150083v1 49514 unplaced primary KN150083.1,NW_003337125.1 chrUn_KN150084v1 24192 unplaced primary KN150084.1,NW_003336468.1 chrUn_KN150085v1 29177 unplaced primary KN150085.1,NW_003334395.2 chrUn_KN150086v1 1639 unplaced primary KN150086.1,NW_003337228.1 chrUn_KN150089v1 13104 unplaced primary KN150089.1,NW_008805435.1 chrUn_KN150090v1 12028 unplaced primary KN150090.1,NW_003336362.1 chrUn_KN150092v1 14544 unplaced primary KN150092.1,NW_003337253.1 chrUn_KN150093v1 14738 unplaced primary KN150093.1,NW_008805436.1 chrUn_KN150094v1 7824 unplaced primary KN150094.1,NW_008805437.1 chrUn_KN150095v1 9204 unplaced primary KN150095.1,NW_008805438.1 chrUn_KN150097v1 11690 unplaced primary KN150097.1,NW_003336961.1 chrUn_KN150098v1 68279 unplaced primary KN150098.1,NW_003335654.1 chrUn_KN150100v1 9237 unplaced primary KN150100.1,NW_003334852.2 chrUn_KN150102v1 34431 unplaced primary KN150102.1,NW_003337197.1 chrUn_KN150103v1 4090 unplaced primary KN150103.1,NW_008805440.1 chrUn_KN150104v1 53188 unplaced primary KN150104.1,NW_003335567.1 chrUn_KN150105v1 58062 unplaced primary KN150105.1,NW_003337145.1 chrUn_KN150106v1 56524 unplaced primary KN150106.1,NW_003334032.1 chrUn_KN150110v1 9804 unplaced primary KN150110.1,NW_003336548.1 chrUn_KN150111v1 29931 unplaced primary KN150111.1,NW_003335663.1 chrUn_KN150112v1 3423 unplaced primary KN150112.1,NW_003334114.1 chrUn_KN150113v1 19310 unplaced primary KN150113.1,NW_003336808.1 chrUn_KN150114v1 24178 unplaced primary KN150114.1,NW_003336645.1 chrUn_KN150115v1 18676 unplaced primary KN150115.1,NW_008805441.1 chrUn_KN150117v1 48543 unplaced primary KN150117.1,NW_003336299.1 chrUn_KN150118v1 54494 unplaced primary KN150118.1,NW_003337121.1 chrUn_KN150119v1 1143 unplaced primary KN150119.1,NW_008805442.1 chrUn_KN150120v1 27511 unplaced primary KN150120.1,NW_008805443.1 chrUn_KN150121v1 8447 unplaced primary KN150121.1,NW_003337032.1 chrUn_KN150122v1 67534 unplaced primary KN150122.1,NW_003337033.1 chrUn_KN150123v1 51978 unplaced primary KN150123.1,NW_003334680.2 chrUn_KN150125v1 83315 unplaced primary KN150125.1,NW_003337013.1 chrUn_KN150126v1 24847 unplaced primary KN150126.1,NW_003336385.1 chrUn_KN150127v1 33302 unplaced primary KN150127.1,NW_003336678.1 chrUn_KN150128v1 12262 unplaced primary KN150128.1,NW_003336812.1 chrUn_KN150130v1 9925 unplaced primary KN150130.1,NW_008805444.1 chrUn_KN150131v1 70868 unplaced primary KN150131.1,NW_008805445.1 chrUn_KN150132v1 13999 unplaced primary KN150132.1,NW_003336900.1 chrUn_KN150133v2 53456 unplaced primary KN150133.2,NW_003334034.2 chrUn_KN150134v1 29067 unplaced primary KN150134.1,NW_003336226.1 chrUn_KN150136v1 49373 unplaced primary KN150136.1,NW_003336484.1 chrUn_KN150137v1 36779 unplaced primary KN150137.1,NW_003336679.1 chrUn_KN150140v2 19733 unplaced primary KN150140.2,NW_003336878.3 chrUn_KN150141v1 17117 unplaced primary KN150141.1,NW_003335166.2 chrUn_KN150144v1 14974 unplaced primary KN150144.1,NW_003336479.1 chrUn_KN150145v1 9970 unplaced primary KN150145.1,NW_008805448.1 chrUn_KN150146v1 9714 unplaced primary KN150146.1,NW_003337126.1 chrUn_KN150147v1 7977 unplaced primary KN150147.1,NW_003335184.2 chrUn_KN150148v1 44589 unplaced primary KN150148.1,NW_003337040.2 chrUn_KN150150v1 9780 unplaced primary KN150150.1,NW_008805449.1 chrUn_KN150152v1 9348 unplaced primary KN150152.1,NW_008805450.1 chrUn_KN150154v1 21695 unplaced primary KN150154.1,NW_003335322.1 chrUn_KN150155v1 10282 unplaced primary KN150155.1,NW_008805451.1 chrUn_KN150156v1 33247 unplaced primary KN150156.1,NW_003337259.1 chrUn_KN150157v1 18756 unplaced primary KN150157.1,NW_003337224.1 chrUn_KN150158v1 106536 unplaced primary KN150158.1,NW_003335383.2 chrUn_KN150159v1 35229 unplaced primary KN150159.1,NW_003337196.1 chrUn_KN150160v1 17824 unplaced primary KN150160.1,NW_003336286.1 chrUn_KN150161v1 12647 unplaced primary KN150161.1,NW_008805452.1 chrUn_KN150162v1 10930 unplaced primary KN150162.1,NW_003336381.1 chrUn_KN150164v1 11300 unplaced primary KN150164.1,NW_003335796.1 chrUn_KN150165v1 32739 unplaced primary KN150165.1,NW_003336925.1 chrUn_KN150166v1 49457 unplaced primary KN150166.1,NW_003336541.1 chrUn_KN150167v1 13466 unplaced primary KN150167.1,NW_003336392.1 chrUn_KN150168v1 28382 unplaced primary KN150168.1,NW_003336254.1 chrUn_KN150170v1 55716 unplaced primary KN150170.1,NW_003336404.2 chrUn_KN150171v1 140649 unplaced primary KN150171.1,NW_003336964.1 chrUn_KN150172v1 40634 unplaced primary KN150172.1,NW_008805454.1 chrUn_KN150173v1 50946 unplaced primary KN150173.1,NW_003336455.2 chrUn_KN150174v1 13450 unplaced primary KN150174.1,NW_008805455.1 chrUn_KN150175v1 24612 unplaced primary KN150175.1,NW_003337250.1 chrUn_KN150176v1 69061 unplaced primary KN150176.1,NW_003334499.2 chrUn_KN150177v1 21670 unplaced primary KN150177.1,NW_003336928.1 chrUn_KN150179v1 47473 unplaced primary KN150179.1,NW_003336461.1 chrUn_KN150180v1 1872 unplaced primary KN150180.1,NW_003337031.1 chrUn_KN150181v1 32761 unplaced primary KN150181.1,NW_003335920.1 chrUn_KN150182v1 11735 unplaced primary KN150182.1,NW_003337162.1 chrUn_KN150183v1 22266 unplaced primary KN150183.1,NW_003334281.1 chrUn_KN150184v1 16312 unplaced primary KN150184.1,NW_003336327.1 chrUn_KN150185v1 8651 unplaced primary KN150185.1,NW_003336293.1 chrUn_KN150186v1 23923 unplaced primary KN150186.1,NW_003334071.2 chrUn_KN150187v1 19179 unplaced primary KN150187.1,NW_003336328.1 chrUn_KN150189v1 38868 unplaced primary KN150189.1,NW_003336699.1 chrUn_KN150190v1 11399 unplaced primary KN150190.1,NW_003336858.1 chrUn_KN150191v1 42303 unplaced primary KN150191.1,NW_003334899.1 chrUn_KN150193v1 12580 unplaced primary KN150193.1,NW_003336332.1 chrUn_KN150194v1 13629 unplaced primary KN150194.1,NW_003336375.1 chrUn_KN150195v1 18921 unplaced primary KN150195.1,NW_003336913.1 chrUn_KN150196v1 89077 unplaced primary KN150196.1,NW_008805458.1 chrUn_KN150197v1 14532 unplaced primary KN150197.1,NW_003337171.1 chrUn_KN150199v1 16564 unplaced primary KN150199.1,NW_003336871.1 chrUn_KN150200v1 31861 unplaced primary KN150200.1,NW_008805459.1 chrUn_KN150201v1 9480 unplaced primary KN150201.1,NW_003336661.1 chrUn_KN150202v1 15451 unplaced primary KN150202.1,NW_003337002.1 chrUn_KN150203v1 24004 unplaced primary KN150203.1,NW_003337189.1 chrUn_KN150204v1 95149 unplaced primary KN150204.1,NW_003337204.1 chrUn_KN150205v1 2620 unplaced primary KN150205.1,NW_003337172.1 chrUn_KN150206v1 2052 unplaced primary KN150206.1,NW_003336388.1 chrUn_KN150210v1 12550 unplaced primary KN150210.1,NW_003337136.1 chrUn_KN150211v1 16386 unplaced primary KN150211.1,NW_003336376.1 chrUn_KN150212v1 18932 unplaced primary KN150212.1,NW_003335408.1 chrUn_KN150213v1 16101 unplaced primary KN150213.1,NW_008805461.1 chrUn_KN150214v1 162877 unplaced primary KN150214.1,NW_003336732.1 chrUn_KN150215v1 1237 unplaced primary KN150215.1,NW_003334517.2 chrUn_KN150216v1 1020 unplaced primary KN150216.1,NW_008805462.1 chrUn_KN150217v1 13840 unplaced primary KN150217.1,NW_008805463.1 chrUn_KN150218v1 15354 unplaced primary KN150218.1,NW_003336601.1 chrUn_KN150219v1 16672 unplaced primary KN150219.1,NW_003336553.1 chrUn_KN150220v1 29625 unplaced primary KN150220.1,NW_003335052.1 chrUn_KN150221v1 28122 unplaced primary KN150221.1,NW_003336895.1 chrUn_KN150222v1 110669 unplaced primary KN150222.1,NW_003336730.1 chrUn_KN150224v1 24154 unplaced primary KN150224.1,NW_003335355.2 chrUn_KN150225v1 20429 unplaced primary KN150225.1,NW_008805465.1 chrUn_KN150226v1 25293 unplaced primary KN150226.1,NW_003334453.1 chrUn_KN150227v1 31979 unplaced primary KN150227.1,NW_003336903.1 chrUn_KN150228v1 17061 unplaced primary KN150228.1,NW_003337202.1 chrUn_KN150229v1 1251 unplaced primary KN150229.1,NW_003336632.1 chrUn_KN150230v1 149710 unplaced primary KN150230.1,NW_003335764.1 chrUn_KN150231v1 2322 unplaced primary KN150231.1,NW_008805466.1 chrUn_KN150232v1 53540 unplaced primary KN150232.1,NW_003336350.1 chrUn_KN150233v1 2246 unplaced primary KN150233.1,NW_003336429.1 chrUn_KN150234v1 18511 unplaced primary KN150234.1,NW_003336769.1 chrUn_KN150236v1 19315 unplaced primary KN150236.1,NW_008805468.1 chrUn_KN150237v1 1732 unplaced primary KN150237.1,NW_003336914.1 chrUn_KN150238v1 9450 unplaced primary KN150238.1,NW_003336515.1 chrUn_KN150240v1 31723 unplaced primary KN150240.1,NW_003335884.2 chrUn_KN150241v1 60821 unplaced primary KN150241.1,NW_003336647.1 chrUn_KN150242v1 20063 unplaced primary KN150242.1,NW_003334219.2 chrUn_KN150243v2 45964 unplaced primary KN150243.2,NW_003336949.3 chrUn_KN150244v1 42860 unplaced primary KN150244.1,NW_003336894.1 chrUn_KN150246v1 15365 unplaced primary KN150246.1,NW_008805470.1 chrUn_KN150248v1 18273 unplaced primary KN150248.1,NW_003337198.1 chrUn_KN150249v1 12261 unplaced primary KN150249.1,NW_003336377.1 chrUn_KN150250v1 13560 unplaced primary KN150250.1,NW_008805472.1 chrUn_KN150251v1 26988 unplaced primary KN150251.1,NW_008805473.1 chrUn_KN150252v1 43133 unplaced primary KN150252.1,NW_003334150.2 chrUn_KN150253v1 3149 unplaced primary KN150253.1,NW_003336972.2 chrUn_KN150254v1 12144 unplaced primary KN150254.1,NW_003336921.1 chrUn_KN150255v2 29368 unplaced primary KN150255.2,NW_003336517.2 chrUn_KN150257v1 12735 unplaced primary KN150257.1,NW_003336819.1 chrUn_KN150258v1 95885 unplaced primary KN150258.1,NW_003337070.1 chrUn_KN150259v1 50098 unplaced primary KN150259.1,NW_003336396.1 chrUn_KN150260v1 12318 unplaced primary KN150260.1,NW_003337096.1 chrUn_KN150263v1 31336 unplaced primary KN150263.1,NW_003336283.1 chrUn_KN150264v1 16955 unplaced primary KN150264.1,NW_003334519.2 chrUn_KN150265v1 51555 unplaced primary KN150265.1,NW_003335278.1 chrUn_KN150267v1 77778 unplaced primary KN150267.1,NW_003337203.1 chrUn_KN150268v1 15280 unplaced primary KN150268.1,NW_008805476.1 chrUn_KN150269v1 48062 unplaced primary KN150269.1,NW_003336662.1 chrUn_KN150270v1 22285 unplaced primary KN150270.1,NW_003337159.1 chrUn_KN150271v1 12637 unplaced primary KN150271.1,NW_003336846.1 chrUn_KN150272v1 34295 unplaced primary KN150272.1,NW_003336573.1 chrUn_KN150274v1 12247 unplaced primary KN150274.1,NW_003336884.1 chrUn_KN150275v1 13800 unplaced primary KN150275.1,NW_003336488.1 chrUn_KN150276v1 12942 unplaced primary KN150276.1,NW_003336666.1 chrUn_KN150278v1 30978 unplaced primary KN150278.1,NW_003337101.1 chrUn_KN150279v1 11402 unplaced primary KN150279.1,NW_003337080.1 chrUn_KN150280v1 10487 unplaced primary KN150280.1,NW_008805478.1 chrUn_KN150282v1 23758 unplaced primary KN150282.1,NW_003336036.1 chrUn_KN150283v1 13933 unplaced primary KN150283.1,NW_008805480.1 chrUn_KN150284v1 18131 unplaced primary KN150284.1,NW_003336443.1 chrUn_KN150285v1 25361 unplaced primary KN150285.1,NW_003334203.1 chrUn_KN150286v1 9068 unplaced primary KN150286.1,NW_008805481.1 chrUn_KN150287v1 11856 unplaced primary KN150287.1,NW_003337239.1 chrUn_KN150289v1 22206 unplaced primary KN150289.1,NW_003336437.1 chrUn_KN150290v1 18248 unplaced primary KN150290.1,NW_003337065.1 chrUn_KN150291v1 25796 unplaced primary KN150291.1,NW_003336764.1 chrUn_KN150292v1 9984 unplaced primary KN150292.1,NW_003337025.1 chrUn_KN150293v1 40764 unplaced primary KN150293.1,NW_008805483.1 chrUn_KN150296v1 10238 unplaced primary KN150296.1,NW_003336834.1 chrUn_KN150297v1 23472 unplaced primary KN150297.1,NW_003337028.1 chrUn_KN150299v1 23511 unplaced primary KN150299.1,NW_003337154.1 chrUn_KN150300v1 9489 unplaced primary KN150300.1,NW_003336674.1 chrUn_KN150301v1 18664 unplaced primary KN150301.1,NW_003336572.2 chrUn_KN150302v1 13538 unplaced primary KN150302.1,NW_008805487.1 chrUn_KN150303v1 39288 unplaced primary KN150303.1,NW_008805488.1 chrUn_KN150306v1 36728 unplaced primary KN150306.1,NW_003336603.1 chrUn_KN150307v1 9167 unplaced primary KN150307.1,NW_003336554.1 chrUn_KN150308v1 18907 unplaced primary KN150308.1,NW_003337131.2 chrUn_KN150309v1 20999 unplaced primary KN150309.1,NW_003336529.1 chrUn_KN150310v1 20509 unplaced primary KN150310.1,NW_008805490.1 chrUn_KN150311v1 15747 unplaced primary KN150311.1,NW_003337042.1 chrUn_KN150312v1 17282 unplaced primary KN150312.1,NW_008805491.1 chrUn_KN150313v1 20655 unplaced primary KN150313.1,NW_003336176.2 chrUn_KN150314v1 12455 unplaced primary KN150314.1,NW_003337059.1 chrUn_KN150315v1 20424 unplaced primary KN150315.1,NW_003337219.1 chrUn_KN150317v1 14866 unplaced primary KN150317.1,NW_008805493.1 chrUn_KN150318v1 2580 unplaced primary KN150318.1,NW_008805494.1 chrUn_KN150319v1 15807 unplaced primary KN150319.1,NW_003336810.1 chrUn_KN150320v1 1241 unplaced primary KN150320.1,NW_008805495.1 chrUn_KN150322v1 19644 unplaced primary KN150322.1,NW_008805497.1 chrUn_KN150323v1 18137 unplaced primary KN150323.1,NW_003336675.1 chrUn_KN150324v1 24032 unplaced primary KN150324.1,NW_003334033.1 chrUn_KN150325v1 19525 unplaced primary KN150325.1,NW_003336599.1 chrUn_KN150326v1 109565 unplaced primary KN150326.1,NW_003336663.1 chrUn_KN150327v1 19949 unplaced primary KN150327.1,NW_008805498.1 chrUn_KN150328v1 17410 unplaced primary KN150328.1,NW_003336978.1 chrUn_KN150329v1 13297 unplaced primary KN150329.1,NW_003337127.1 chrUn_KN150330v1 28440 unplaced primary KN150330.1,NW_003334988.2 chrUn_KN150331v1 44968 unplaced primary KN150331.1,NW_003336940.1 chrUn_KN150332v1 22862 unplaced primary KN150332.1,NW_003336784.1 chrUn_KN150333v1 12275 unplaced primary KN150333.1,NW_003335050.1 chrUn_KN150334v1 22542 unplaced primary KN150334.1,NW_003336876.1 chrUn_KN150335v1 44504 unplaced primary KN150335.1,NW_003337117.1 chrUn_KN150336v1 48672 unplaced primary KN150336.1,NW_003334683.1 chrUn_KN150337v1 20260 unplaced primary KN150337.1,NW_003336442.1 chrUn_KN150338v1 1142 unplaced primary KN150338.1,NW_003336815.1 chrUn_KN150340v1 28741 unplaced primary KN150340.1,NW_003334670.1 chrUn_KN150341v1 31147 unplaced primary KN150341.1,NW_003337182.1 chrUn_KN150342v1 82590 unplaced primary KN150342.1,NW_003335650.1 chrUn_KN150343v1 26928 unplaced primary KN150343.1,NW_003336806.1 chrUn_KN150344v1 19681 unplaced primary KN150344.1,NW_008805499.1 chrUn_KN150345v1 17012 unplaced primary KN150345.1,NW_003337008.2 chrUn_KN150347v1 51528 unplaced primary KN150347.1,NW_003336513.1 chrUn_KN150349v1 29114 unplaced primary KN150349.1,NW_003336956.1 chrUn_KN150350v1 9245 unplaced primary KN150350.1,NW_003336410.1 chrUn_KN150351v1 49608 unplaced primary KN150351.1,NW_003336758.1 chrUn_KN150352v2 25352 unplaced primary KN150352.2,NW_003336681.2 chrUn_KN150353v1 19631 unplaced primary KN150353.1,NW_003336715.1 chrUn_KN150354v1 1452 unplaced primary KN150354.1,NW_003336475.1 chrUn_KN150355v1 6731 unplaced primary KN150355.1,NW_003337006.1 chrUn_KN150357v1 27326 unplaced primary KN150357.1,NW_003337192.1 chrUn_KN150358v1 9951 unplaced primary KN150358.1,NW_008805501.1 chrUn_KN150360v1 15639 unplaced primary KN150360.1,NW_003336934.1 chrUn_KN150361v1 53624 unplaced primary KN150361.1,NW_008805502.1 chrUn_KN150362v1 17145 unplaced primary KN150362.1,NW_003336636.1 chrUn_KN150363v1 22766 unplaced primary KN150363.1,NW_003336387.2 chrUn_KN150364v1 15084 unplaced primary KN150364.1,NW_003336746.1 chrUn_KN150365v1 10769 unplaced primary KN150365.1,NW_008805503.1 chrUn_KN150366v1 10057 unplaced primary KN150366.1,NW_003336766.1 chrUn_KN150368v1 18491 unplaced primary KN150368.1,NW_003336088.1 chrUn_KN150369v1 11460 unplaced primary KN150369.1,NW_003336929.1 chrUn_KN150371v1 13836 unplaced primary KN150371.1,NW_003336374.1 chrUn_KN150372v1 29560 unplaced primary KN150372.1,NW_003337097.1 chrUn_KN150374v1 9775 unplaced primary KN150374.1,NW_003336772.2 chrUn_KN150375v1 111208 unplaced primary KN150375.1,NW_008805506.1 chrUn_KN150379v1 29907 unplaced primary KN150379.1,NW_003336918.1 chrUn_KN150380v1 12144 unplaced primary KN150380.1,NW_003337115.1 chrUn_KN150382v1 14074 unplaced primary KN150382.1,NW_003336287.1 chrUn_KN150383v1 7777 unplaced primary KN150383.1,NW_003335266.1 chrUn_KN150384v1 22969 unplaced primary KN150384.1,NW_003337193.1 chrUn_KN150385v1 37055 unplaced primary KN150385.1,NW_003335289.1 chrUn_KN150386v1 35900 unplaced primary KN150386.1,NW_003337183.1 chrUn_KN150387v1 15215 unplaced primary KN150387.1,NW_003336845.1 chrUn_KN150388v1 22284 unplaced primary KN150388.1,NW_008805508.1 chrUn_KN150389v1 10334 unplaced primary KN150389.1,NW_008805509.1 chrUn_KN150390v1 19066 unplaced primary KN150390.1,NW_003336331.2 chrUn_KN150392v1 12069 unplaced primary KN150392.1,NW_003336185.1 chrUn_KN150393v1 12073 unplaced primary KN150393.1,NW_008805510.1 chrUn_KN150394v1 17139 unplaced primary KN150394.1,NW_003337222.1 chrUn_KN150395v1 9792 unplaced primary KN150395.1,NW_003336361.1 chrUn_KN150396v1 8176 unplaced primary KN150396.1,NW_003337207.1 chrUn_KN150397v1 17295 unplaced primary KN150397.1,NW_003336593.1 chrUn_KN150398v1 39557 unplaced primary KN150398.1,NW_003336425.1 chrUn_KN150399v1 19362 unplaced primary KN150399.1,NW_003337242.1 chrUn_KN150400v1 34930 unplaced primary KN150400.1,NW_003337146.1 chrUn_KN150401v1 10081 unplaced primary KN150401.1,NW_003336665.1 chrUn_KN150403v1 34697 unplaced primary KN150403.1,NW_003336855.1 chrUn_KN150404v1 18160 unplaced primary KN150404.1,NW_008805511.1 chrUn_KN150405v1 76919 unplaced primary KN150405.1,NW_003335907.1 chrUn_KN150406v1 17215 unplaced primary KN150406.1,NW_003334182.1 chrUn_KN150407v1 31814 unplaced primary KN150407.1,NW_003336727.1 chrUn_KN150408v1 37191 unplaced primary KN150408.1,NW_003337083.1 chrUn_KN150411v1 20886 unplaced primary KN150411.1,NW_003336533.1 chrUn_KN150412v1 9605 unplaced primary KN150412.1,NW_008805514.1 chrUn_KN150413v1 15078 unplaced primary KN150413.1,NW_003337251.1 chrUn_KN150414v1 35871 unplaced primary KN150414.1,NW_003337046.1 chrUn_KN150416v1 33835 unplaced primary KN150416.1,NW_003337161.1 chrUn_KN150418v1 14930 unplaced primary KN150418.1,NW_008805516.1 chrUn_KN150419v1 14114 unplaced primary KN150419.1,NW_003337233.1 chrUn_KN150420v1 14290 unplaced primary KN150420.1,NW_008805517.1 chrUn_KN150421v1 14951 unplaced primary KN150421.1,NW_003336994.1 chrUn_KN150422v1 15053 unplaced primary KN150422.1,NW_003336621.1 chrUn_KN150425v1 110593 unplaced primary KN150425.1,NW_003336436.1 chrUn_KN150426v1 21499 unplaced primary KN150426.1,NW_003334448.1 chrUn_KN150428v1 29216 unplaced primary KN150428.1,NW_003336422.1 chrUn_KN150429v1 17683 unplaced primary KN150429.1,NW_003337045.1 chrUn_KN150430v1 16452 unplaced primary KN150430.1,NW_003336966.1 chrUn_KN150431v1 89659 unplaced primary KN150431.1,NW_003336510.1 chrUn_KN150432v1 91010 unplaced primary KN150432.1,NW_003336612.1 chrUn_KN150434v1 12053 unplaced primary KN150434.1,NW_003336824.1 chrUn_KN150436v1 17739 unplaced primary KN150436.1,NW_003336998.2 chrUn_KN150437v1 1262 unplaced primary KN150437.1,NW_003335163.1 chrUn_KN150439v1 10343 unplaced primary KN150439.1,NW_003337068.1 chrUn_KN150440v1 1193 unplaced primary KN150440.1,NW_003334844.1 chrUn_KN150441v1 12439 unplaced primary KN150441.1,NW_003336324.1 chrUn_KN150443v1 11834 unplaced primary KN150443.1,NW_003337088.1 chrUn_KN150444v1 11830 unplaced primary KN150444.1,NW_003336989.1 chrUn_KN150445v1 12072 unplaced primary KN150445.1,NW_008805522.1 chrUn_KN150446v1 12446 unplaced primary KN150446.1,NW_008805523.1 chrUn_KN150449v1 62607 unplaced primary KN150449.1,NW_008805526.1 chrUn_KN150450v1 25362 unplaced primary KN150450.1,NW_008805527.1 chrUn_KN150451v1 14920 unplaced primary KN150451.1,NW_008805528.1 chrUn_KN150452v1 8345 unplaced primary KN150452.1,NW_003336441.1 chrUn_KN150453v1 13591 unplaced primary KN150453.1,NW_008805529.1 chrUn_KN150454v1 18479 unplaced primary KN150454.1,NW_003337265.1 chrUn_KN150455v1 73536 unplaced primary KN150455.1,NW_003337116.1 chrUn_KN150458v1 17481 unplaced primary KN150458.1,NW_003337124.1 chrUn_KN150459v1 45603 unplaced primary KN150459.1,NW_003337132.1 chrUn_KN150462v1 24623 unplaced primary KN150462.1,NW_003334810.2 chrUn_KN150464v1 24865 unplaced primary KN150464.1,NW_003337179.1 chrUn_KN150465v1 1765 unplaced primary KN150465.1,NW_008805532.1 chrUn_KN150466v1 41319 unplaced primary KN150466.1,NW_003336897.1 chrUn_KN150467v1 11202 unplaced primary KN150467.1,NW_008805533.1 chrUn_KN150468v1 25381 unplaced primary KN150468.1,NW_003336414.1 chrUn_KN150469v1 14614 unplaced primary KN150469.1,NW_003336514.1 chrUn_KN150470v1 2027 unplaced primary KN150470.1,NW_003335559.1 chrUn_KN150471v1 76663 unplaced primary KN150471.1,NW_003335375.1 chrUn_KN150472v1 14586 unplaced primary KN150472.1,NW_003337034.1 chrUn_KN150473v1 1285 unplaced primary KN150473.1,NW_008805534.1 chrUn_KN150475v1 17517 unplaced primary KN150475.1,NW_003335148.1 chrUn_KN150476v1 59211 unplaced primary KN150476.1,NW_003336445.1 chrUn_KN150477v1 61693 unplaced primary KN150477.1,NW_003337143.1 chrUn_KN150478v1 25813 unplaced primary KN150478.1,NW_003336671.1 chrUn_KN150479v1 48186 unplaced primary KN150479.1,NW_008805535.1 chrUn_KN150481v1 1008 unplaced primary KN150481.1,NW_003334506.1 chrUn_KN150483v1 17332 unplaced primary KN150483.1,NW_003337177.1 chrUn_KN150484v1 14965 unplaced primary KN150484.1,NW_003334956.2 chrUn_KN150485v1 7348 unplaced primary KN150485.1,NW_003337187.1 chrUn_KN150486v1 8572 unplaced primary KN150486.1,NW_008805538.1 chrUn_KN150487v1 123701 unplaced primary KN150487.1,NW_003336534.1 chrUn_KN150488v1 17582 unplaced primary KN150488.1,NW_003336507.1 chrUn_KN150489v1 26739 unplaced primary KN150489.1,NW_003336591.1 chrUn_KN150490v1 23057 unplaced primary KN150490.1,NW_008805539.1 chrUn_KN150491v1 13001 unplaced primary KN150491.1,NW_008805540.1 chrUn_KN150492v2 30275 unplaced primary KN150492.2,NW_003337261.2 chrUn_KN150493v1 35575 unplaced primary KN150493.1,NW_003336563.1 chrUn_KN150494v1 10108 unplaced primary KN150494.1,NW_003336347.1 chrUn_KN150495v1 28160 unplaced primary KN150495.1,NW_003336321.1 chrUn_KN150499v1 11840 unplaced primary KN150499.1,NW_003336729.1 chrUn_KN150500v1 19866 unplaced primary KN150500.1,NW_003336968.1 chrUn_KN150501v1 22392 unplaced primary KN150501.1,NW_003334575.1 chrUn_KN150502v1 13027 unplaced primary KN150502.1,NW_008805541.1 chrUn_KN150503v1 1834 unplaced primary KN150503.1,NW_003336687.2 chrUn_KN150504v1 12094 unplaced primary KN150504.1,NW_003337122.1 chrUn_KN150505v1 39265 unplaced primary KN150505.1,NW_008805542.1 chrUn_KN150506v1 14319 unplaced primary KN150506.1,NW_008805543.1 chrUn_KN150508v1 26814 unplaced primary KN150508.1,NW_003337071.1 chrUn_KN150509v1 11846 unplaced primary KN150509.1,NW_008805544.1 chrUn_KN150510v1 13237 unplaced primary KN150510.1,NW_003336872.1 chrUn_KN150511v1 38183 unplaced primary KN150511.1,NW_003337218.1 chrUn_KN150513v1 10220 unplaced primary KN150513.1,NW_003336451.1 chrUn_KN150514v1 19391 unplaced primary KN150514.1,NW_003336893.1 chrUn_KN150515v1 1813 unplaced primary KN150515.1,NW_003336686.1 chrUn_KN150516v1 49339 unplaced primary KN150516.1,NW_003335321.1 chrUn_KN150517v1 16171 unplaced primary KN150517.1,NW_003336995.1 chrUn_KN150518v1 40394 unplaced primary KN150518.1,NW_008805545.1 chrUn_KN150519v1 11974 unplaced primary KN150519.1,NW_003336494.1 chrUn_KN150520v1 103159 unplaced primary KN150520.1,NW_003334254.1 chrUn_KN150521v1 20896 unplaced primary KN150521.1,NW_003337266.1 chrUn_KN150522v1 12046 unplaced primary KN150522.1,NW_003336169.1 chrUn_KN150523v1 19004 unplaced primary KN150523.1,NW_003336403.1 chrUn_KN150525v1 650 unplaced primary KN150525.1,NW_003336558.1 chrUn_KN150526v1 15513 unplaced primary KN150526.1,NW_003336311.1 chrUn_KN150527v1 20880 unplaced primary KN150527.1,NW_003336627.1 chrUn_KN150528v1 13138 unplaced primary KN150528.1,NW_003336655.1 chrUn_KN150529v1 81946 unplaced primary KN150529.1,NW_003335906.1 chrUn_KN150530v1 7299 unplaced primary KN150530.1,NW_003336511.1 chrUn_KN150532v1 21602 unplaced primary KN150532.1,NW_003336781.2 chrUn_KN150534v1 17661 unplaced primary KN150534.1,NW_003337106.1 chrUn_KN150535v1 2315 unplaced primary KN150535.1,NW_008805549.1 chrUn_KN150536v1 17908 unplaced primary KN150536.1,NW_003336520.1 chrUn_KN150537v1 27568 unplaced primary KN150537.1,NW_003336426.1 chrUn_KN150538v1 12119 unplaced primary KN150538.1,NW_003337019.1 chrUn_KN150540v1 15288 unplaced primary KN150540.1,NW_003336701.2 chrUn_KN150541v1 12323 unplaced primary KN150541.1,NW_003336946.1 chrUn_KN150542v1 12167 unplaced primary KN150542.1,NW_003336583.1 chrUn_KN150543v1 2343 unplaced primary KN150543.1,NW_003335154.1 chrUn_KN150544v1 1198 unplaced primary KN150544.1,NW_003337120.1 chrUn_KN150545v1 17546 unplaced primary KN150545.1,NW_003336473.1 chrUn_KN150546v1 10851 unplaced primary KN150546.1,NW_008805550.1 chrUn_KN150547v1 37420 unplaced primary KN150547.1,NW_003337043.1 chrUn_KN150548v1 46061 unplaced primary KN150548.1,NW_003336435.2 chrUn_KN150549v1 17599 unplaced primary KN150549.1,NW_008805551.1 chrUn_KN150550v1 14915 unplaced primary KN150550.1,NW_008805552.1 chrUn_KN150551v1 9435 unplaced primary KN150551.1,NW_003336399.1 chrUn_KN150552v1 74050 unplaced primary KN150552.1,NW_003334318.1 chrUn_KN150553v1 14032 unplaced primary KN150553.1,NW_003336237.1 chrUn_KN150554v1 9251 unplaced primary KN150554.1,NW_003336448.1 chrUn_KN150555v1 9941 unplaced primary KN150555.1,NW_008805553.1 chrUn_KN150556v1 9286 unplaced primary KN150556.1,NW_003336975.1 chrUn_KN150557v1 41459 unplaced primary KN150557.1,NW_003336471.1 chrUn_KN150558v1 12115 unplaced primary KN150558.1,NW_003336684.1 chrUn_KN150559v1 26580 unplaced primary KN150559.1,NW_003336341.1 chrUn_KN150560v1 2301 unplaced primary KN150560.1,NW_003336300.2 chrUn_KN150561v1 22238 unplaced primary KN150561.1,NW_003335113.1 chrUn_KN150562v1 22875 unplaced primary KN150562.1,NW_003336996.1 chrUn_KN150564v1 17709 unplaced primary KN150564.1,NW_003336398.1 chrUn_KN150565v1 20464 unplaced primary KN150565.1,NW_003336308.1 chrUn_KN150567v1 49566 unplaced primary KN150567.1,NW_003336976.1 chrUn_KN150568v1 108195 unplaced primary KN150568.1,NW_003336276.1 chrUn_KN150570v1 42279 unplaced primary KN150570.1,NW_003335350.1 chrUn_KN150571v1 16505 unplaced primary KN150571.1,NW_003336924.1 chrUn_KN150572v1 28871 unplaced primary KN150572.1,NW_003336559.1 chrUn_KN150573v1 26604 unplaced primary KN150573.1,NW_003336747.1 chrUn_KN150574v1 18499 unplaced primary KN150574.1,NW_003337151.1 chrUn_KN150575v1 11084 unplaced primary KN150575.1,NW_003336892.1 chrUn_KN150576v1 36129 unplaced primary KN150576.1,NW_003337260.1 chrUn_KN150577v1 13719 unplaced primary KN150577.1,NW_003336742.1 chrUn_KN150578v1 103698 unplaced primary KN150578.1,NW_003336492.1 chrUn_KN150579v1 23586 unplaced primary KN150579.1,NW_003336493.1 chrUn_KN150580v1 32349 unplaced primary KN150580.1,NW_003336274.1 chrUn_KN150581v1 12355 unplaced primary KN150581.1,NW_003337107.1 chrUn_KN150582v1 12396 unplaced primary KN150582.1,NW_003336907.1 chrUn_KN150583v1 1918 unplaced primary KN150583.1,NW_008805555.1 chrUn_KN150585v1 12430 unplaced primary KN150585.1,NW_003336630.1 chrUn_KN150586v1 17388 unplaced primary KN150586.1,NW_008805557.1 chrUn_KN150587v1 8461 unplaced primary KN150587.1,NW_008805558.1 chrUn_KN150588v1 14103 unplaced primary KN150588.1,NW_003336773.1 chrUn_KN150589v1 18957 unplaced primary KN150589.1,NW_003334902.1 chrUn_KN150591v1 8817 unplaced primary KN150591.1,NW_003336888.1 chrUn_KN150592v1 50000 unplaced primary KN150592.1,NW_003335319.1 chrUn_KN150593v1 14353 unplaced primary KN150593.1,NW_003334536.1 chrUn_KN150594v1 19382 unplaced primary KN150594.1,NW_003336521.1 chrUn_KN150595v1 12507 unplaced primary KN150595.1,NW_008805559.1 chrUn_KN150596v1 60847 unplaced primary KN150596.1,NW_003336991.1 chrUn_KN150598v1 12499 unplaced primary KN150598.1,NW_003336762.1 chrUn_KN150599v1 19019 unplaced primary KN150599.1,NW_003336836.1 chrUn_KN150601v1 11167 unplaced primary KN150601.1,NW_008805561.1 chrUn_KN150602v1 22730 unplaced primary KN150602.1,NW_003336682.1 chrUn_KN150603v1 98280 unplaced primary KN150603.1,NW_003336757.1 chrUn_KN150605v1 102574 unplaced primary KN150605.1,NW_003336579.1 chrUn_KN150606v1 51696 unplaced primary KN150606.1,NW_003336826.1 chrUn_KN150607v1 9531 unplaced primary KN150607.1,NW_003336325.1 chrUn_KN150608v1 149650 unplaced primary KN150608.1,NW_003335359.2 chrUn_KN150609v1 37413 unplaced primary KN150609.1,NW_003336840.1 chrUn_KN150610v1 10565 unplaced primary KN150610.1,NW_003336302.1 chrUn_KN150613v1 15739 unplaced primary KN150613.1,NW_003336721.1 chrUn_KN150614v1 9019 unplaced primary KN150614.1,NW_008805563.1 chrUn_KN150615v1 9878 unplaced primary KN150615.1,NW_008805564.1 chrUn_KN150616v1 88699 unplaced primary KN150616.1,NW_003336543.1 chrUn_KN150617v1 90208 unplaced primary KN150617.1,NW_003335385.1 chrUn_KN150619v1 41925 unplaced primary KN150619.1,NW_003336277.2 chrUn_KN150620v1 30729 unplaced primary KN150620.1,NW_003336997.1 chrUn_KN150621v1 1204 unplaced primary KN150621.1,NW_003335146.1 chrUn_KN150622v1 15811 unplaced primary KN150622.1,NW_003336614.1 chrUn_KN150623v1 1126 unplaced primary KN150623.1,NW_003337225.1 chrUn_KN150625v1 22486 unplaced primary KN150625.1,NW_003336372.1 chrUn_KN150626v1 32850 unplaced primary KN150626.1,NW_003336568.1 chrUn_KN150628v1 33906 unplaced primary KN150628.1,NW_008805566.1 chrUn_KN150629v1 19604 unplaced primary KN150629.1,NW_003334261.1 chrUn_KN150630v1 86421 unplaced primary KN150630.1,NW_003336337.1 chrUn_KN150631v1 36324 unplaced primary KN150631.1,NW_003335149.2 chrUn_KN150632v1 11627 unplaced primary KN150632.1,NW_003336725.1 chrUn_KN150633v1 19558 unplaced primary KN150633.1,NW_003335143.1 chrUn_KN150634v1 16020 unplaced primary KN150634.1,NW_003334668.1 chrUn_KN150635v1 27947 unplaced primary KN150635.1,NW_008805567.1 chrUn_KN150636v1 20513 unplaced primary KN150636.1,NW_008805568.1 chrUn_KN150639v1 27620 unplaced primary KN150639.1,NW_003336281.1 chrUn_KN150640v1 20890 unplaced primary KN150640.1,NW_003337057.1 chrUn_KN150641v1 14778 unplaced primary KN150641.1,NW_003335935.1 chrUn_KN150642v1 55536 unplaced primary KN150642.1,NW_003335314.1 chrUn_KN150643v1 28088 unplaced primary KN150643.1,NW_003336958.1 chrUn_KN150644v1 20534 unplaced primary KN150644.1,NW_008805570.1 chrUn_KN150645v1 22839 unplaced primary KN150645.1,NW_003336613.1 chrUn_KN150646v1 78076 unplaced primary KN150646.1,NW_003336358.1 chrUn_KN150647v1 14938 unplaced primary KN150647.1,NW_008805571.1 chrUn_KN150649v1 81249 unplaced primary KN150649.1,NW_003336843.1 chrUn_KN150650v1 3012 unplaced primary KN150650.1,NW_003336973.1 chrUn_KN150651v1 28018 unplaced primary KN150651.1,NW_003337123.1 chrUn_KN150652v1 18075 unplaced primary KN150652.1,NW_003336743.1 chrUn_KN150653v1 55997 unplaced primary KN150653.1,NW_008805573.1 chrUn_KN150654v1 18414 unplaced primary KN150654.1,NW_008805574.1 chrUn_KN150655v1 8089 unplaced primary KN150655.1,NW_008805575.1 chrUn_KN150656v2 29322 unplaced primary KN150656.2,NW_003336774.3 chrUn_KN150659v1 11827 unplaced primary KN150659.1,NW_003334429.1 chrUn_KN150661v1 26250 unplaced primary KN150661.1,NW_003334452.1 chrUn_KN150662v1 17820 unplaced primary KN150662.1,NW_003336355.1 chrUn_KN150663v1 88608 unplaced primary KN150663.1,NW_003337060.1 chrUn_KN150664v1 9590 unplaced primary KN150664.1,NW_003336740.1 chrUn_KN150665v1 11944 unplaced primary KN150665.1,NW_003337186.1 chrUn_KN150666v1 63484 unplaced primary KN150666.1,NW_003336407.1 chrUn_KN150667v1 54201 unplaced primary KN150667.1,NW_003336566.1 chrUn_KN150668v1 21856 unplaced primary KN150668.1,NW_003336756.1 chrUn_KN150669v1 15325 unplaced primary KN150669.1,NW_003336850.1 chrUn_KN150670v1 77993 unplaced primary KN150670.1,NW_003335386.2 chrUn_KN150671v1 13526 unplaced primary KN150671.1,NW_003337038.1 chrUn_KN150675v1 41858 unplaced primary KN150675.1,NW_003337029.1 chrUn_KN150676v1 51674 unplaced primary KN150676.1,NW_003336294.1 chrUn_KN150677v1 66956 unplaced primary KN150677.1,NW_008805579.1 chrUn_KN150678v1 7552 unplaced primary KN150678.1,NW_003337026.1 chrUn_KN150679v1 14065 unplaced primary KN150679.1,NW_003336847.1 chrUn_KN150680v1 13379 unplaced primary KN150680.1,NW_003334441.1 chrUn_KN150682v1 15190 unplaced primary KN150682.1,NW_003337188.1 chrUn_KN150683v1 16822 unplaced primary KN150683.1,NW_003334692.2 chrUn_KN150684v1 24053 unplaced primary KN150684.1,NW_003337255.1 chrUn_KN150685v1 13309 unplaced primary KN150685.1,NW_003336523.1 chrUn_KN150687v1 13294 unplaced primary KN150687.1,NW_008805580.1 chrUn_KN150689v1 19550 unplaced primary KN150689.1,NW_003336343.1 chrUn_KN150690v1 26145 unplaced primary KN150690.1,NW_003337041.1 chrUn_KN150691v1 184625 unplaced primary KN150691.1,NW_003336957.1 chrUn_KN150697v1 12709 unplaced primary KN150697.1,NW_003336278.1 chrUn_KN150698v1 31983 unplaced primary KN150698.1,NW_003335800.1 chrUn_KN150699v1 26100 unplaced primary KN150699.1,NW_003334027.1 chrUn_KN150700v2 71715 unplaced primary KN150700.2,NW_008805582.2 chrUn_KN150701v1 1133 unplaced primary KN150701.1,NW_003335530.1 chrUn_KN150703v1 48009 unplaced primary KN150703.1,NW_003336712.1 chrUn_KN150708v1 42677 unplaced primary KN150708.1,NW_008805585.1 chrUn_KN150709v1 65370 unplaced primary KN150709.1,NW_003337165.1 chrUn_KN150710v1 19629 unplaced primary KN150710.1,NW_003337075.1 chrUn_KN150711v1 11940 unplaced primary KN150711.1,NW_003336651.1 chrUn_KN150713v1 14579 unplaced primary KN150713.1,NW_003336760.1 chrUn_KZ115948v1 7895 unplaced primary KZ115948.1,NW_018394340.1 chrUn_KZ115949v1 19487 unplaced primary KZ115949.1,NW_018394341.1 chrUn_KZ115950v1 11151 unplaced primary KZ115950.1,NW_018394342.1 chrUn_KZ115951v1 1460 unplaced primary KZ115951.1,NW_018394343.1 chrUn_KZ115952v1 6745 unplaced primary KZ115952.1,NW_018394344.1 chrUn_KZ115953v1 1282 unplaced primary KZ115953.1,NW_018394345.1 chrUn_KZ115954v1 7681 unplaced primary KZ115954.1,NW_018394346.1 chrUn_KZ115955v1 2649 unplaced primary KZ115955.1,NW_018394347.1 chrUn_KZ115956v1 11017 unplaced primary KZ115956.1,NW_018394348.1 chrUn_KZ115957v1 3033 unplaced primary KZ115957.1,NW_018394349.1 chrUn_KZ115958v1 16150 unplaced primary KZ115958.1,NW_018394350.1 chrUn_KZ115959v1 2076 unplaced primary KZ115959.1,NW_018394351.1 chrUn_KZ115960v1 10408 unplaced primary KZ115960.1,NW_018394352.1 chrUn_KZ115961v1 1814 unplaced primary KZ115961.1,NW_018394353.1 chrUn_KZ115962v1 9328 unplaced primary KZ115962.1,NW_018394354.1 chrUn_KZ115963v1 5511 unplaced primary KZ115963.1,NW_018394355.1 chrUn_KZ115964v1 21985 unplaced primary KZ115964.1,NW_018394356.1 chrUn_KZ115965v1 8631 unplaced primary KZ115965.1,NW_018394357.1 chrUn_KZ115966v1 10700 unplaced primary KZ115966.1,NW_018394358.1 chrUn_KZ115967v1 2223 unplaced primary KZ115967.1,NW_018394359.1 chrUn_KZ115968v1 7463 unplaced primary KZ115968.1,NW_018394360.1 chrUn_KZ115969v1 11096 unplaced primary KZ115969.1,NW_018394361.1 chrUn_KZ115970v1 4964 unplaced primary KZ115970.1,NW_018394362.1 chrUn_KZ115971v1 10999 unplaced primary KZ115971.1,NW_018394363.1 chrUn_KZ115972v1 18193 unplaced primary KZ115972.1,NW_018394364.1 chrUn_KZ115973v1 7329 unplaced primary KZ115973.1,NW_018394365.1 chrUn_KZ115974v1 33679 unplaced primary KZ115974.1,NW_018394366.1 chrUn_KZ115975v1 1668 unplaced primary KZ115975.1,NW_018394367.1 chrUn_KZ115976v1 3381 unplaced primary KZ115976.1,NW_018394368.1 chrUn_KZ115977v1 1917 unplaced primary KZ115977.1,NW_018394369.1 chrUn_KZ115978v1 4867 unplaced primary KZ115978.1,NW_018394370.1 chrUn_KZ115979v1 12653 unplaced primary KZ115979.1,NW_018394371.1 chrUn_KZ115980v1 11444 unplaced primary KZ115980.1,NW_018394372.1 chrUn_KZ115981v1 12102 unplaced primary KZ115981.1,NW_018394373.1 chrUn_KZ115982v1 21678 unplaced primary KZ115982.1,NW_018394374.1 chrUn_KZ115983v1 10690 unplaced primary KZ115983.1,NW_018394375.1 chrUn_KZ115984v1 2298 unplaced primary KZ115984.1,NW_018394376.1 chrUn_KZ115985v1 14091 unplaced primary KZ115985.1,NW_018394377.1 chrUn_KZ115986v1 14146 unplaced primary KZ115986.1,NW_018394378.1 chrUn_KZ115987v1 34728 unplaced primary KZ115987.1,NW_018394379.1 chrUn_KZ115988v1 2311 unplaced primary KZ115988.1,NW_018394380.1 chrUn_KZ115989v1 11382 unplaced primary KZ115989.1,NW_018394381.1 chrUn_KZ115990v1 8014 unplaced primary KZ115990.1,NW_018394382.1 chrUn_KZ115991v1 3745 unplaced primary KZ115991.1,NW_018394383.1 chrUn_KZ115992v1 1250 unplaced primary KZ115992.1,NW_018394384.1 chrUn_KZ115993v1 17707 unplaced primary KZ115993.1,NW_018394385.1 chrUn_KZ115994v1 17825 unplaced primary KZ115994.1,NW_018394386.1 chrUn_KZ115995v1 5114 unplaced primary KZ115995.1,NW_018394387.1 chrUn_KZ115996v1 5023 unplaced primary KZ115996.1,NW_018394388.1 chrUn_KZ115997v1 3918 unplaced primary KZ115997.1,NW_018394389.1 chrUn_KZ115998v1 9069 unplaced primary KZ115998.1,NW_018394390.1 chrUn_KZ115999v1 8942 unplaced primary KZ115999.1,NW_018394391.1 chrUn_KZ116000v1 15093 unplaced primary KZ116000.1,NW_018394392.1 chrUn_KZ116001v1 13723 unplaced primary KZ116001.1,NW_018394393.1 chrUn_KZ116002v1 9522 unplaced primary KZ116002.1,NW_018394394.1 chrUn_KZ116003v1 15105 unplaced primary KZ116003.1,NW_018394395.1 chrUn_KZ116004v1 19050 unplaced primary KZ116004.1,NW_018394396.1 chrUn_KZ116005v1 1920 unplaced primary KZ116005.1,NW_018394397.1 chrUn_KZ116006v1 13138 unplaced primary KZ116006.1,NW_018394398.1 chrUn_KZ116007v1 11049 unplaced primary KZ116007.1,NW_018394399.1 chrUn_KZ116008v1 17226 unplaced primary KZ116008.1,NW_018394400.1 chrUn_KZ116009v1 1395 unplaced primary KZ116009.1,NW_018394401.1 chrUn_KZ116010v1 6942 unplaced primary KZ116010.1,NW_018394402.1 chrUn_KZ116011v1 51615 unplaced primary KZ116011.1,NW_018394403.1 chrUn_KZ116012v1 9499 unplaced primary KZ116012.1,NW_018394404.1 chrUn_KZ116013v1 7022 unplaced primary KZ116013.1,NW_018394405.1 chrUn_KZ116014v1 1536 unplaced primary KZ116014.1,NW_018394406.1 chrUn_KZ116015v1 9998 unplaced primary KZ116015.1,NW_018394407.1 chrUn_KZ116016v1 5168 unplaced primary KZ116016.1,NW_018394408.1 chrUn_KZ116017v1 2865 unplaced primary KZ116017.1,NW_018394409.1 chrUn_KZ116018v1 11006 unplaced primary KZ116018.1,NW_018394410.1 chrUn_KZ116019v1 34606 unplaced primary KZ116019.1,NW_018394411.1 chrUn_KZ116020v1 14934 unplaced primary KZ116020.1,NW_018394412.1 chrUn_KZ116021v1 17216 unplaced primary KZ116021.1,NW_018394413.1 chrUn_KZ116022v1 1919 unplaced primary KZ116022.1,NW_018394414.1 chrUn_KZ116023v1 7875 unplaced primary KZ116023.1,NW_018394415.1 chrUn_KZ116024v1 31767 unplaced primary KZ116024.1,NW_018394416.1 chrUn_KZ116025v1 3864 unplaced primary KZ116025.1,NW_018394417.1 chrUn_KZ116026v1 14318 unplaced primary KZ116026.1,NW_018394418.1 chrUn_KZ116027v1 4074 unplaced primary KZ116027.1,NW_018394419.1 chrUn_KZ116028v1 3289 unplaced primary KZ116028.1,NW_018394420.1 chrUn_KZ116029v1 32560 unplaced primary KZ116029.1,NW_018394421.1 chrUn_KZ116030v1 3552 unplaced primary KZ116030.1,NW_018394422.1 chrUn_KZ116031v1 19707 unplaced primary KZ116031.1,NW_018394423.1 chrUn_KZ116032v1 5873 unplaced primary KZ116032.1,NW_018394424.1 chrUn_KZ116033v1 27103 unplaced primary KZ116033.1,NW_018394425.1 chrUn_KZ116034v1 33615 unplaced primary KZ116034.1,NW_018394426.1 chrUn_KZ116035v1 1766 unplaced primary KZ116035.1,NW_018394427.1 chrUn_KZ116036v1 1919 unplaced primary KZ116036.1,NW_018394428.1 chrUn_KZ116037v1 13248 unplaced primary KZ116037.1,NW_018394429.1 chrUn_KZ116038v1 1428 unplaced primary KZ116038.1,NW_018394430.1 chrUn_KZ116039v1 12461 unplaced primary KZ116039.1,NW_018394431.1 chrUn_KZ116040v1 3054 unplaced primary KZ116040.1,NW_018394432.1 chrUn_KZ116041v1 12997 unplaced primary KZ116041.1,NW_018394433.1 chrUn_KZ116042v1 13126 unplaced primary KZ116042.1,NW_018394434.1 chrUn_KZ116043v1 19339 unplaced primary KZ116043.1,NW_018394435.1 chrUn_KZ116044v1 37221 unplaced primary KZ116044.1,NW_018394436.1 chrUn_KZ116045v1 2029 unplaced primary KZ116045.1,NW_018394437.1 chrUn_KZ116046v1 5807 unplaced primary KZ116046.1,NW_018394438.1 chrUn_KZ116047v1 14251 unplaced primary KZ116047.1,NW_018394439.1 chrUn_KZ116048v1 1356 unplaced primary KZ116048.1,NW_018394440.1 chrUn_KZ116049v1 8498 unplaced primary KZ116049.1,NW_018394441.1 chrUn_KZ116050v1 6653 unplaced primary KZ116050.1,NW_018394442.1 chrUn_KZ116051v1 2418 unplaced primary KZ116051.1,NW_018394443.1 chrUn_KZ116052v1 2026 unplaced primary KZ116052.1,NW_018394444.1 chrUn_KZ116053v1 16466 unplaced primary KZ116053.1,NW_018394445.1 chrUn_KZ116054v1 14656 unplaced primary KZ116054.1,NW_018394446.1 chrUn_KZ116055v1 7229 unplaced primary KZ116055.1,NW_018394447.1 chrUn_KZ116056v1 10581 unplaced primary KZ116056.1,NW_018394448.1 chrUn_KZ116057v1 4882 unplaced primary KZ116057.1,NW_018394449.1 chrUn_KZ116058v1 4138 unplaced primary KZ116058.1,NW_018394450.1 chrUn_KZ116059v1 34033 unplaced primary KZ116059.1,NW_018394451.1 chrUn_KZ116060v1 7854 unplaced primary KZ116060.1,NW_018394452.1 chrUn_KZ116061v1 1669 unplaced primary KZ116061.1,NW_018394453.1 chrUn_KZ116062v1 6923 unplaced primary KZ116062.1,NW_018394454.1 chrUn_KZ116063v1 2601 unplaced primary KZ116063.1,NW_018394455.1 chrUn_KZ116064v1 153879 unplaced primary KZ116064.1,NW_018394456.1 chrUn_KZ116065v1 37354 unplaced primary KZ116065.1,NW_018394457.1 chrUn_KZ116066v1 161442 unplaced primary KZ116066.1,NW_018394458.1 chrUn_KZ116067v1 159186 unplaced primary KZ116067.1,NW_018394459.1 open2c-bioframe-4fe9b25/bioframe/io/data/dm3.seqinfo.tsv000066400000000000000000000017531477525772300231250ustar00rootroot00000000000000name length role molecule unit aliases chr2L 23011544 assembled chr2 primary 2L,NT_033779.4,AE014134.5 chr2R 21146708 assembled chr2 primary 2R,NT_033778.3,AE013599.4 chr3L 24543557 assembled chr3 primary 3L,NT_037436.3,AE014296.4 chr3R 27905053 assembled chr3 primary 3R,NT_033777.2,AE014297.2 chr4 1351857 assembled chr4 primary 4,NC_004353.3,AE014135.3 chrX 22422827 assembled chrX primary X,NC_004354.3,AE014298.4 chrM 19517 assembled chrM non-nuclear MT,NS_000188.1,FA000001.1 chr2LHet 368872 unlocalized chr2 primary 2LHet,NW_001848855.1,CM000456.1 chr2RHet 3288761 unlocalized chr2 primary 2RHet,NW_001848856.1,CM000457.1 chr3LHet 2555491 unlocalized chr3 primary 3LHet,NW_001848857.1,CM000458.1 chr3RHet 2517507 unlocalized chr3 primary 3RHet,NW_001848858.1,CM000459.1 chrXHet 204112 unlocalized chrX primary XHet,NW_001848859.1,CM000460.1 chrYHet 347038 unlocalized chrY primary YHet,NW_001848860.1,CM000461.1 chrU 10049037 unplaced primary Un,NC_001709.1 chrUextra 29004656 unplaced primary open2c-bioframe-4fe9b25/bioframe/io/data/dm6.seqinfo.tsv000066400000000000000000004742651477525772300231440ustar00rootroot00000000000000name length role molecule unit aliases chr2L 23513712 assembled chr2 primary 2L,NT_033779.5,AE014134.6 chr2R 25286936 assembled chr2 primary 2R,NT_033778.4,AE013599.5 chr3L 28110227 assembled chr3 primary 3L,NT_037436.4,AE014296.5 chr3R 32079331 assembled chr3 primary 3R,NT_033777.3,AE014297.3 chr4 1348131 assembled chr4 primary 4,NC_004353.4,AE014135.4 chrX 23542271 assembled chrX primary X,NC_004354.4,AE014298.5 chrY 3667352 assembled chrY primary Y,NC_024512.1,CP007106.1 chrM 19524 assembled chrM non-nuclear MT,NC_024511.2,KJ947872.2 chrX_CP007103v1_random 33320 unlocalized chrX primary NW_007931105.1,CP007103.1,X3X4_mapped_Scaffold_6 chrX_CP007104v1_random 27447 unlocalized chrX primary NW_007931106.1,CP007104.1,X3X4_mapped_Scaffold_14 chrX_DS483648v1_random 13940 unlocalized chrX primary NW_001844937.1,DS483648.1,211000022278498 chrX_DS483655v1_random 13549 unlocalized chrX primary NW_001844944.1,DS483655.1,211000022279009 chrX_DS483660v1_random 13394 unlocalized chrX primary NW_001844949.1,DS483660.1,211000022280042 chrX_DS483665v1_random 13234 unlocalized chrX primary NW_001844954.1,DS483665.1,211000022279446 chrX_DS483666v1_random 13108 unlocalized chrX primary NW_001844955.1,DS483666.1,211000022280270 chrX_DS483669v1_random 12848 unlocalized chrX primary NW_001844958.1,DS483669.1,211000022279008 chrX_DS483685v1_random 12187 unlocalized chrX primary NW_001844974.1,DS483685.1,211000022279676 chrX_DS483698v1_random 11522 unlocalized chrX primary NW_001844987.1,DS483698.1,211000022279836 chrX_DS483745v1_random 9368 unlocalized chrX primary NW_001845034.1,DS483745.1,211000022280526 chrX_DS483784v1_random 5832 unlocalized chrX primary NW_001845073.1,DS483784.1,211000022279563 chrX_DS483789v1_random 5555 unlocalized chrX primary NW_001845078.1,DS483789.1,211000022279955 chrX_DS483795v1_random 5387 unlocalized chrX primary NW_001845084.1,DS483795.1,211000022280241 chrX_DS483803v1_random 5232 unlocalized chrX primary NW_001845092.1,DS483803.1,211000022280466 chrX_DS483809v1_random 5057 unlocalized chrX primary NW_001845098.1,DS483809.1,211000022279883 chrX_DS483818v1_random 4917 unlocalized chrX primary NW_001845107.1,DS483818.1,211000022280649 chrX_DS483821v1_random 4879 unlocalized chrX primary NW_001845110.1,DS483821.1,211000022280645 chrX_DS483843v1_random 4515 unlocalized chrX primary NW_001845132.1,DS483843.1,211000022279705 chrX_DS483851v1_random 4395 unlocalized chrX primary NW_001845140.1,DS483851.1,211000022280624 chrX_DS483885v1_random 4085 unlocalized chrX primary NW_001845174.1,DS483885.1,211000022280479 chrX_DS483888v1_random 4072 unlocalized chrX primary NW_001845177.1,DS483888.1,211000022280016 chrX_DS483892v1_random 4013 unlocalized chrX primary NW_001845181.1,DS483892.1,211000022280529 chrX_DS483893v1_random 4012 unlocalized chrX primary NW_001845182.1,DS483893.1,211000022280539 chrX_DS483897v1_random 3984 unlocalized chrX primary NW_001845186.1,DS483897.1,211000022279731 chrX_DS483903v1_random 3941 unlocalized chrX primary NW_001845192.1,DS483903.1,211000022280603 chrX_DS483905v1_random 3926 unlocalized chrX primary NW_001845194.1,DS483905.1,211000022279673 chrX_DS483907v1_random 3921 unlocalized chrX primary NW_001845196.1,DS483907.1,211000022280439 chrX_DS483909v1_random 3913 unlocalized chrX primary NW_001845198.1,DS483909.1,211000022280593 chrX_DS483923v1_random 3775 unlocalized chrX primary NW_001845212.1,DS483923.1,211000022280629 chrX_DS483926v1_random 3745 unlocalized chrX primary NW_001845215.1,DS483926.1,211000022280625 chrX_DS483928v1_random 3730 unlocalized chrX primary NW_001845217.1,DS483928.1,211000022280495 chrX_DS483946v1_random 3603 unlocalized chrX primary NW_001845235.1,DS483946.1,211000022280620 chrX_DS483948v1_random 3602 unlocalized chrX primary NW_001845237.1,DS483948.1,211000022280578 chrX_DS483950v1_random 3582 unlocalized chrX primary NW_001845239.1,DS483950.1,211000022280470 chrX_DS483955v1_random 3553 unlocalized chrX primary NW_001845244.1,DS483955.1,211000022279730 chrX_DS483963v1_random 3523 unlocalized chrX primary NW_001845252.1,DS483963.1,211000022278896 chrX_DS483969v1_random 3498 unlocalized chrX primary NW_001845258.1,DS483969.1,211000022280668 chrX_DS483971v1_random 3478 unlocalized chrX primary NW_001845260.1,DS483971.1,211000022279499 chrX_DS483974v1_random 3473 unlocalized chrX primary NW_001845263.1,DS483974.1,211000022280597 chrX_DS483995v1_random 3347 unlocalized chrX primary NW_001845284.1,DS483995.1,211000022279188 chrX_DS484002v1_random 3290 unlocalized chrX primary NW_001845291.1,DS484002.1,211000022279772 chrX_DS484005v1_random 3275 unlocalized chrX primary NW_001845294.1,DS484005.1,211000022279497 chrX_DS484012v1_random 3254 unlocalized chrX primary NW_001845301.1,DS484012.1,211000022278361 chrX_DS484023v1_random 3206 unlocalized chrX primary NW_001845312.1,DS484023.1,211000022278544 chrX_DS484026v1_random 3201 unlocalized chrX primary NW_001845315.1,DS484026.1,211000022280669 chrX_DS484046v1_random 3123 unlocalized chrX primary NW_001845335.1,DS484046.1,211000022280587 chrX_DS484051v1_random 3100 unlocalized chrX primary NW_001845340.1,DS484051.1,211000022280538 chrX_DS484057v1_random 3076 unlocalized chrX primary NW_001845346.1,DS484057.1,211000022279109 chrX_DS484060v1_random 3065 unlocalized chrX primary NW_001845349.1,DS484060.1,211000022280641 chrX_DS484061v1_random 3059 unlocalized chrX primary NW_001845350.1,DS484061.1,211000022280532 chrX_DS484067v1_random 3024 unlocalized chrX primary NW_001845356.1,DS484067.1,211000022279460 chrX_DS484072v1_random 3002 unlocalized chrX primary NW_001845361.1,DS484072.1,211000022279081 chrX_DS484074v1_random 2999 unlocalized chrX primary NW_001845363.1,DS484074.1,211000022278235 chrX_DS484075v1_random 2996 unlocalized chrX primary NW_001845364.1,DS484075.1,211000022280542 chrX_DS484081v1_random 2964 unlocalized chrX primary NW_001845370.1,DS484081.1,211000022280584 chrX_DS484084v1_random 2956 unlocalized chrX primary NW_001845373.1,DS484084.1,211000022278208 chrX_DS484085v1_random 2945 unlocalized chrX primary NW_001845374.1,DS484085.1,211000022279277 chrX_DS484088v1_random 2937 unlocalized chrX primary NW_001845377.1,DS484088.1,211000022279608 chrX_DS484099v1_random 2910 unlocalized chrX primary NW_001845388.1,DS484099.1,211000022280639 chrX_DS484101v1_random 2904 unlocalized chrX primary NW_001845390.1,DS484101.1,211000022278724 chrX_DS484112v1_random 2877 unlocalized chrX primary NW_001845401.1,DS484112.1,211000022278846 chrX_DS484114v1_random 2871 unlocalized chrX primary NW_001845403.1,DS484114.1,211000022278868 chrX_DS484124v1_random 2846 unlocalized chrX primary NW_001845413.1,DS484124.1,211000022279968 chrX_DS484125v1_random 2844 unlocalized chrX primary NW_001845414.1,DS484125.1,211000022279698 chrX_DS484126v1_random 2841 unlocalized chrX primary NW_001845415.1,DS484126.1,211000022278463 chrX_DS484130v1_random 2834 unlocalized chrX primary NW_001845419.1,DS484130.1,211000022279552 chrX_DS484131v1_random 2833 unlocalized chrX primary NW_001845420.1,DS484131.1,211000022279703 chrX_DS484132v1_random 2830 unlocalized chrX primary NW_001845421.1,DS484132.1,211000022280642 chrX_DS484133v1_random 2829 unlocalized chrX primary NW_001845422.1,DS484133.1,211000022280592 chrX_DS484135v1_random 2825 unlocalized chrX primary NW_001845424.1,DS484135.1,211000022279408 chrX_DS484136v1_random 2823 unlocalized chrX primary NW_001845425.1,DS484136.1,211000022278821 chrX_DS484137v1_random 2822 unlocalized chrX primary NW_001845426.1,DS484137.1,211000022279082 chrX_DS484140v1_random 2819 unlocalized chrX primary NW_001845429.1,DS484140.1,211000022280537 chrX_DS484143v1_random 2814 unlocalized chrX primary NW_001845432.1,DS484143.1,211000022279502 chrX_DS484161v1_random 2781 unlocalized chrX primary NW_001845450.1,DS484161.1,211000022278209 chrX_DS484162v1_random 2765 unlocalized chrX primary NW_001845451.1,DS484162.1,211000022279298 chrX_DS484165v1_random 2751 unlocalized chrX primary NW_001845454.1,DS484165.1,211000022279287 chrX_DS484166v1_random 2750 unlocalized chrX primary NW_001845455.1,DS484166.1,211000022280632 chrX_DS484178v1_random 2698 unlocalized chrX primary NW_001845467.1,DS484178.1,211000022278921 chrX_DS484182v1_random 2689 unlocalized chrX primary NW_001845471.1,DS484182.1,211000022278645 chrX_DS484185v1_random 2686 unlocalized chrX primary NW_001845474.1,DS484185.1,211000022280148 chrX_DS484187v1_random 2671 unlocalized chrX primary NW_001845476.1,DS484187.1,211000022280095 chrX_DS484198v1_random 2641 unlocalized chrX primary NW_001845487.1,DS484198.1,211000022278630 chrX_DS484200v1_random 2639 unlocalized chrX primary NW_001845489.1,DS484200.1,211000022278316 chrX_DS484201v1_random 2637 unlocalized chrX primary NW_001845490.1,DS484201.1,211000022278615 chrX_DS484203v1_random 2635 unlocalized chrX primary NW_001845492.1,DS484203.1,211000022279917 chrX_DS484215v1_random 2605 unlocalized chrX primary NW_001845504.1,DS484215.1,211000022278648 chrX_DS484216v1_random 2603 unlocalized chrX primary NW_001845505.1,DS484216.1,211000022280062 chrX_DS484219v1_random 2591 unlocalized chrX primary NW_001845508.1,DS484219.1,211000022278299 chrX_DS484235v1_random 2557 unlocalized chrX primary NW_001845524.1,DS484235.1,211000022278489 chrX_DS484252v1_random 2520 unlocalized chrX primary NW_001845541.1,DS484252.1,211000022278831 chrX_DS484260v1_random 2505 unlocalized chrX primary NW_001845549.1,DS484260.1,211000022279062 chrX_DS484261v1_random 2500 unlocalized chrX primary NW_001845550.1,DS484261.1,211000022278622 chrX_DS484268v1_random 2475 unlocalized chrX primary NW_001845557.1,DS484268.1,211000022279902 chrX_DS484272v1_random 2464 unlocalized chrX primary NW_001845561.1,DS484272.1,211000022278172 chrX_DS484273v1_random 2463 unlocalized chrX primary NW_001845562.1,DS484273.1,211000022279994 chrX_DS484278v1_random 2439 unlocalized chrX primary NW_001845567.1,DS484278.1,211000022280586 chrX_DS484284v1_random 2432 unlocalized chrX primary NW_001845573.1,DS484284.1,211000022278225 chrX_DS484288v1_random 2425 unlocalized chrX primary NW_001845577.1,DS484288.1,211000022278828 chrX_DS484293v1_random 2420 unlocalized chrX primary NW_001845582.1,DS484293.1,211000022279537 chrX_DS484297v1_random 2413 unlocalized chrX primary NW_001845586.1,DS484297.1,211000022279967 chrX_DS484298v1_random 2412 unlocalized chrX primary NW_001845587.1,DS484298.1,211000022278578 chrX_DS484305v1_random 2389 unlocalized chrX primary NW_001845594.1,DS484305.1,211000022278908 chrX_DS484316v1_random 2379 unlocalized chrX primary NW_001845605.1,DS484316.1,211000022280453 chrX_DS484319v1_random 2372 unlocalized chrX primary NW_001845608.1,DS484319.1,211000022279530 chrX_DS484322v1_random 2366 unlocalized chrX primary NW_001845611.1,DS484322.1,211000022279340 chrX_DS484323v1_random 2363 unlocalized chrX primary NW_001845612.1,DS484323.1,211000022278844 chrX_DS484326v1_random 2357 unlocalized chrX primary NW_001845615.1,DS484326.1,211000022280507 chrX_DS484328v1_random 2355 unlocalized chrX primary NW_001845617.1,DS484328.1,211000022279704 chrX_DS484330v1_random 2353 unlocalized chrX primary NW_001845619.1,DS484330.1,211000022280534 chrX_DS484337v1_random 2335 unlocalized chrX primary NW_001845626.1,DS484337.1,211000022278649 chrX_DS484341v1_random 2328 unlocalized chrX primary NW_001845630.1,DS484341.1,211000022280633 chrX_DS484344v1_random 2322 unlocalized chrX primary NW_001845633.1,DS484344.1,211000022279092 chrX_DS484345v1_random 2318 unlocalized chrX primary NW_001845634.1,DS484345.1,211000022279774 chrX_DS484346v1_random 2317 unlocalized chrX primary NW_001845635.1,DS484346.1,211000022279504 chrX_DS484349v1_random 2307 unlocalized chrX primary NW_001845638.1,DS484349.1,211000022278810 chrX_DS484354v1_random 2293 unlocalized chrX primary NW_001845643.1,DS484354.1,211000022278557 chrX_DS484356v1_random 2289 unlocalized chrX primary NW_001845645.1,DS484356.1,211000022279689 chrX_DS484357v1_random 2287 unlocalized chrX primary NW_001845646.1,DS484357.1,211000022279085 chrX_DS484358v1_random 2286 unlocalized chrX primary NW_001845647.1,DS484358.1,211000022278341 chrX_DS484359v1_random 2284 unlocalized chrX primary NW_001845648.1,DS484359.1,211000022279553 chrX_DS484360v1_random 2283 unlocalized chrX primary NW_001845649.1,DS484360.1,211000022278823 chrX_DS484361v1_random 2282 unlocalized chrX primary NW_001845650.1,DS484361.1,211000022279732 chrX_DS484362v1_random 2273 unlocalized chrX primary NW_001845651.1,DS484362.1,211000022278612 chrX_DS484364v1_random 2269 unlocalized chrX primary NW_001845653.1,DS484364.1,211000022278639 chrX_DS484367v1_random 2259 unlocalized chrX primary NW_001845656.1,DS484367.1,211000022278249 chrX_DS484368v1_random 2259 unlocalized chrX primary NW_001845657.1,DS484368.1,211000022278629 chrX_DS484371v1_random 2247 unlocalized chrX primary NW_001845660.1,DS484371.1,211000022280330 chrX_DS484374v1_random 2237 unlocalized chrX primary NW_001845663.1,DS484374.1,211000022279299 chrX_DS484379v1_random 2228 unlocalized chrX primary NW_001845668.1,DS484379.1,211000022278513 chrX_DS484382v1_random 2223 unlocalized chrX primary NW_001845671.1,DS484382.1,211000022280088 chrX_DS484384v1_random 2220 unlocalized chrX primary NW_001845673.1,DS484384.1,211000022279514 chrX_DS484387v1_random 2210 unlocalized chrX primary NW_001845676.1,DS484387.1,211000022280442 chrX_DS484388v1_random 2209 unlocalized chrX primary NW_001845677.1,DS484388.1,211000022278461 chrX_DS484393v1_random 2201 unlocalized chrX primary NW_001845682.1,DS484393.1,211000022278608 chrX_DS484397v1_random 2196 unlocalized chrX primary NW_001845686.1,DS484397.1,211000022278628 chrX_DS484399v1_random 2192 unlocalized chrX primary NW_001845688.1,DS484399.1,211000022278359 chrX_DS484401v1_random 2189 unlocalized chrX primary NW_001845690.1,DS484401.1,211000022278555 chrX_DS484402v1_random 2189 unlocalized chrX primary NW_001845691.1,DS484402.1,211000022278467 chrX_DS484406v1_random 2177 unlocalized chrX primary NW_001845695.1,DS484406.1,211000022278775 chrX_DS484409v1_random 2166 unlocalized chrX primary NW_001845698.1,DS484409.1,211000022278853 chrX_DS484411v1_random 2161 unlocalized chrX primary NW_001845700.1,DS484411.1,211000022278616 chrX_DS484415v1_random 2147 unlocalized chrX primary NW_001845704.1,DS484415.1,211000022278825 chrX_DS484417v1_random 2139 unlocalized chrX primary NW_001845706.1,DS484417.1,211000022279834 chrX_DS484419v1_random 2132 unlocalized chrX primary NW_001845708.1,DS484419.1,211000022279084 chrX_DS484423v1_random 2126 unlocalized chrX primary NW_001845712.1,DS484423.1,211000022279307 chrX_DS484428v1_random 2114 unlocalized chrX primary NW_001845717.1,DS484428.1,211000022278353 chrX_DS484429v1_random 2113 unlocalized chrX primary NW_001845718.1,DS484429.1,211000022278320 chrX_DS484430v1_random 2113 unlocalized chrX primary NW_001845719.1,DS484430.1,211000022278343 chrX_DS484431v1_random 2113 unlocalized chrX primary NW_001845720.1,DS484431.1,211000022278490 chrX_DS484433v1_random 2109 unlocalized chrX primary NW_001845722.1,DS484433.1,211000022279305 chrX_DS484442v1_random 2096 unlocalized chrX primary NW_001845731.1,DS484442.1,211000022278840 chrX_DS484444v1_random 2094 unlocalized chrX primary NW_001845733.1,DS484444.1,211000022279063 chrX_DS484447v1_random 2089 unlocalized chrX primary NW_001845736.1,DS484447.1,211000022278431 chrX_DS484450v1_random 2087 unlocalized chrX primary NW_001845739.1,DS484450.1,211000022278464 chrX_DS484457v1_random 2079 unlocalized chrX primary NW_001845746.1,DS484457.1,211000022278845 chrX_DS484459v1_random 2078 unlocalized chrX primary NW_001845748.1,DS484459.1,211000022278226 chrX_DS484462v1_random 2068 unlocalized chrX primary NW_001845751.1,DS484462.1,211000022279601 chrX_DS484468v1_random 2060 unlocalized chrX primary NW_001845757.1,DS484468.1,211000022279715 chrX_DS484474v1_random 2044 unlocalized chrX primary NW_001845763.1,DS484474.1,211000022279332 chrX_DS484477v1_random 2035 unlocalized chrX primary NW_001845766.1,DS484477.1,211000022278695 chrX_DS484483v1_random 2021 unlocalized chrX primary NW_001845772.1,DS484483.1,211000022278817 chrX_DS484488v1_random 2009 unlocalized chrX primary NW_001845777.1,DS484488.1,211000022280594 chrX_DS484497v1_random 1998 unlocalized chrX primary NW_001845786.1,DS484497.1,211000022278482 chrX_DS484500v1_random 1993 unlocalized chrX primary NW_001845789.1,DS484500.1,211000022278820 chrX_DS484504v1_random 1986 unlocalized chrX primary NW_001845793.1,DS484504.1,211000022278619 chrX_DS484506v1_random 1980 unlocalized chrX primary NW_001845795.1,DS484506.1,211000022278976 chrX_DS484507v1_random 1978 unlocalized chrX primary NW_001845796.1,DS484507.1,211000022278233 chrX_DS484512v1_random 1970 unlocalized chrX primary NW_001845801.1,DS484512.1,211000022278317 chrX_DS484518v1_random 1964 unlocalized chrX primary NW_001845807.1,DS484518.1,211000022278321 chrX_DS484519v1_random 1963 unlocalized chrX primary NW_001845808.1,DS484519.1,211000022278879 chrX_DS484526v1_random 1956 unlocalized chrX primary NW_001845815.1,DS484526.1,211000022278229 chrX_DS484529v1_random 1947 unlocalized chrX primary NW_001845818.1,DS484529.1,211000022278319 chrX_DS484533v1_random 1944 unlocalized chrX primary NW_001845822.1,DS484533.1,211000022278460 chrX_DS484535v1_random 1939 unlocalized chrX primary NW_001845824.1,DS484535.1,211000022279075 chrX_DS484538v1_random 1936 unlocalized chrX primary NW_001845827.1,DS484538.1,211000022280612 chrX_DS484540v1_random 1935 unlocalized chrX primary NW_001845829.1,DS484540.1,211000022278643 chrX_DS484541v1_random 1933 unlocalized chrX primary NW_001845830.1,DS484541.1,211000022279245 chrX_DS484545v1_random 1928 unlocalized chrX primary NW_001845834.1,DS484545.1,211000022278627 chrX_DS484547v1_random 1927 unlocalized chrX primary NW_001845836.1,DS484547.1,211000022278480 chrX_DS484552v1_random 1920 unlocalized chrX primary NW_001845841.1,DS484552.1,211000022278365 chrX_DS484555v1_random 1916 unlocalized chrX primary NW_001845844.1,DS484555.1,211000022278812 chrX_DS484556v1_random 1916 unlocalized chrX primary NW_001845845.1,DS484556.1,211000022280622 chrX_DS484558v1_random 1906 unlocalized chrX primary NW_001845847.1,DS484558.1,211000022278468 chrX_DS484560v1_random 1904 unlocalized chrX primary NW_001845849.1,DS484560.1,211000022279072 chrX_DS484562v1_random 1903 unlocalized chrX primary NW_001845851.1,DS484562.1,211000022280657 chrX_DS484563v1_random 1903 unlocalized chrX primary NW_001845852.1,DS484563.1,211000022280628 chrX_DS484564v1_random 1902 unlocalized chrX primary NW_001845853.1,DS484564.1,211000022278462 chrX_DS484568v1_random 1899 unlocalized chrX primary NW_001845857.1,DS484568.1,211000022278346 chrX_DS484569v1_random 1895 unlocalized chrX primary NW_001845858.1,DS484569.1,211000022278815 chrX_DS484570v1_random 1895 unlocalized chrX primary NW_001845859.1,DS484570.1,211000022278826 chrX_DS484572v1_random 1891 unlocalized chrX primary NW_001845861.1,DS484572.1,211000022278694 chrX_DS484576v1_random 1888 unlocalized chrX primary NW_001845865.1,DS484576.1,211000022278411 chrX_DS484580v1_random 1871 unlocalized chrX primary NW_001845869.1,DS484580.1,211000022279303 chrX_DS484582v1_random 1870 unlocalized chrX primary NW_001845871.1,DS484582.1,211000022278318 chrX_DS484583v1_random 1869 unlocalized chrX primary NW_001845872.1,DS484583.1,211000022278352 chrX_DS484585v1_random 1869 unlocalized chrX primary NW_001845874.1,DS484585.1,211000022278277 chrX_DS484586v1_random 1868 unlocalized chrX primary NW_001845875.1,DS484586.1,211000022280585 chrX_DS484587v1_random 1865 unlocalized chrX primary NW_001845876.1,DS484587.1,211000022278636 chrX_DS484590v1_random 1856 unlocalized chrX primary NW_001845879.1,DS484590.1,211000022278854 chrX_DS484594v1_random 1843 unlocalized chrX primary NW_001845883.1,DS484594.1,211000022278325 chrX_DS484596v1_random 1843 unlocalized chrX primary NW_001845885.1,DS484596.1,211000022278481 chrX_DS484597v1_random 1843 unlocalized chrX primary NW_001845886.1,DS484597.1,211000022278911 chrX_DS484598v1_random 1842 unlocalized chrX primary NW_001845887.1,DS484598.1,211000022278774 chrX_DS484599v1_random 1841 unlocalized chrX primary NW_001845888.1,DS484599.1,211000022279080 chrX_DS484600v1_random 1841 unlocalized chrX primary NW_001845889.1,DS484600.1,211000022278502 chrX_DS484603v1_random 1830 unlocalized chrX primary NW_001845892.1,DS484603.1,211000022279301 chrX_DS484604v1_random 1829 unlocalized chrX primary NW_001845893.1,DS484604.1,211000022278614 chrX_DS484605v1_random 1829 unlocalized chrX primary NW_001845894.1,DS484605.1,211000022278905 chrX_DS484608v1_random 1818 unlocalized chrX primary NW_001845897.1,DS484608.1,211000022278475 chrX_DS484609v1_random 1818 unlocalized chrX primary NW_001845898.1,DS484609.1,211000022278625 chrX_DS484610v1_random 1813 unlocalized chrX primary NW_001845899.1,DS484610.1,211000022278465 chrX_DS484611v1_random 1813 unlocalized chrX primary NW_001845900.1,DS484611.1,211000022278876 chrX_DS484615v1_random 1803 unlocalized chrX primary NW_001845904.1,DS484615.1,211000022280060 chrX_DS484618v1_random 1800 unlocalized chrX primary NW_001845907.1,DS484618.1,211000022279078 chrX_DS484620v1_random 1798 unlocalized chrX primary NW_001845909.1,DS484620.1,211000022279846 chrX_DS484622v1_random 1793 unlocalized chrX primary NW_001845911.1,DS484622.1,211000022278228 chrX_DS484623v1_random 1792 unlocalized chrX primary NW_001845912.1,DS484623.1,211000022279093 chrX_DS484625v1_random 1787 unlocalized chrX primary NW_001845914.1,DS484625.1,211000022278633 chrX_DS484626v1_random 1786 unlocalized chrX primary NW_001845915.1,DS484626.1,211000022278634 chrX_DS484628v1_random 1785 unlocalized chrX primary NW_001845917.1,DS484628.1,211000022278613 chrX_DS484633v1_random 1775 unlocalized chrX primary NW_001845922.1,DS484633.1,211000022278819 chrX_DS484636v1_random 1769 unlocalized chrX primary NW_001845925.1,DS484636.1,211000022279322 chrX_DS484644v1_random 1747 unlocalized chrX primary NW_001845933.1,DS484644.1,211000022278842 chrX_DS484645v1_random 1747 unlocalized chrX primary NW_001845934.1,DS484645.1,211000022279296 chrX_DS484647v1_random 1743 unlocalized chrX primary NW_001845936.1,DS484647.1,211000022278473 chrX_DS484648v1_random 1741 unlocalized chrX primary NW_001845937.1,DS484648.1,211000022278816 chrX_DS484650v1_random 1737 unlocalized chrX primary NW_001845939.1,DS484650.1,211000022278314 chrX_DS484657v1_random 1724 unlocalized chrX primary NW_001845946.1,DS484657.1,211000022278907 chrX_DS484660v1_random 1716 unlocalized chrX primary NW_001845949.1,DS484660.1,211000022278677 chrX_DS484664v1_random 1713 unlocalized chrX primary NW_001845953.1,DS484664.1,211000022278165 chrX_DS484666v1_random 1710 unlocalized chrX primary NW_001845955.1,DS484666.1,211000022280243 chrX_DS484668v1_random 1709 unlocalized chrX primary NW_001845957.1,DS484668.1,211000022278125 chrX_DS484669v1_random 1708 unlocalized chrX primary NW_001845958.1,DS484669.1,211000022279297 chrX_DS484670v1_random 1704 unlocalized chrX primary NW_001845959.1,DS484670.1,211000022278621 chrX_DS484672v1_random 1703 unlocalized chrX primary NW_001845961.1,DS484672.1,211000022278491 chrX_DS484677v1_random 1687 unlocalized chrX primary NW_001845966.1,DS484677.1,211000022279065 chrX_DS484679v1_random 1683 unlocalized chrX primary NW_001845968.1,DS484679.1,211000022278471 chrX_DS484682v1_random 1680 unlocalized chrX primary NW_001845971.1,DS484682.1,211000022279077 chrX_DS484683v1_random 1679 unlocalized chrX primary NW_001845972.1,DS484683.1,211000022278938 chrX_DS484684v1_random 1678 unlocalized chrX primary NW_001845973.1,DS484684.1,211000022278469 chrX_DS484688v1_random 1657 unlocalized chrX primary NW_001845977.1,DS484688.1,211000022278484 chrX_DS484690v1_random 1645 unlocalized chrX primary NW_001845979.1,DS484690.1,211000022278726 chrX_DS484691v1_random 1643 unlocalized chrX primary NW_001845980.1,DS484691.1,211000022278472 chrX_DS484694v1_random 1637 unlocalized chrX primary NW_001845983.1,DS484694.1,211000022279064 chrX_DS484695v1_random 1637 unlocalized chrX primary NW_001845984.1,DS484695.1,211000022278620 chrX_DS484697v1_random 1636 unlocalized chrX primary NW_001845986.1,DS484697.1,211000022280061 chrX_DS484698v1_random 1630 unlocalized chrX primary NW_001845987.1,DS484698.1,211000022278839 chrX_DS484701v1_random 1625 unlocalized chrX primary NW_001845990.1,DS484701.1,211000022278099 chrX_DS484702v1_random 1623 unlocalized chrX primary NW_001845991.1,DS484702.1,211000022279316 chrX_DS484703v1_random 1622 unlocalized chrX primary NW_001845992.1,DS484703.1,211000022278670 chrX_DS484715v1_random 1595 unlocalized chrX primary NW_001846004.1,DS484715.1,211000022279542 chrX_DS484719v1_random 1586 unlocalized chrX primary NW_001846008.1,DS484719.1,211000022279957 chrX_DS484723v1_random 1577 unlocalized chrX primary NW_001846012.1,DS484723.1,211000022278584 chrX_DS484724v1_random 1575 unlocalized chrX primary NW_001846013.1,DS484724.1,211000022278323 chrX_DS484725v1_random 1573 unlocalized chrX primary NW_001846014.1,DS484725.1,211000022279076 chrX_DS484730v1_random 1560 unlocalized chrX primary NW_001846019.1,DS484730.1,211000022278315 chrX_DS484731v1_random 1558 unlocalized chrX primary NW_001846020.1,DS484731.1,211000022278857 chrX_DS484732v1_random 1556 unlocalized chrX primary NW_001846021.1,DS484732.1,211000022280029 chrX_DS484733v1_random 1556 unlocalized chrX primary NW_001846022.1,DS484733.1,211000022279244 chrX_DS484737v1_random 1550 unlocalized chrX primary NW_001846026.1,DS484737.1,211000022278655 chrX_DS484740v1_random 1546 unlocalized chrX primary NW_001846029.1,DS484740.1,211000022278671 chrX_DS484741v1_random 1544 unlocalized chrX primary NW_001846030.1,DS484741.1,211000022278850 chrX_DS484745v1_random 1541 unlocalized chrX primary NW_001846034.1,DS484745.1,211000022278232 chrX_DS484749v1_random 1534 unlocalized chrX primary NW_001846038.1,DS484749.1,211000022279686 chrX_DS484753v1_random 1529 unlocalized chrX primary NW_001846042.1,DS484753.1,211000022279295 chrX_DS484758v1_random 1525 unlocalized chrX primary NW_001846047.1,DS484758.1,211000022278692 chrX_DS484763v1_random 1519 unlocalized chrX primary NW_001846052.1,DS484763.1,211000022278693 chrX_DS484765v1_random 1516 unlocalized chrX primary NW_001846054.1,DS484765.1,211000022278227 chrX_DS484767v1_random 1510 unlocalized chrX primary NW_001846056.1,DS484767.1,211000022279515 chrX_DS484768v1_random 1509 unlocalized chrX primary NW_001846057.1,DS484768.1,211000022278861 chrX_DS484775v1_random 1492 unlocalized chrX primary NW_001846064.1,DS484775.1,211000022279074 chrX_DS484777v1_random 1489 unlocalized chrX primary NW_001846066.1,DS484777.1,211000022279066 chrX_DS484778v1_random 1488 unlocalized chrX primary NW_001846067.1,DS484778.1,211000022278829 chrX_DS484783v1_random 1482 unlocalized chrX primary NW_001846072.1,DS484783.1,211000022278827 chrX_DS484785v1_random 1478 unlocalized chrX primary NW_001846074.1,DS484785.1,211000022278512 chrX_DS484786v1_random 1476 unlocalized chrX primary NW_001846075.1,DS484786.1,211000022278851 chrX_DS484803v1_random 1461 unlocalized chrX primary NW_001846092.1,DS484803.1,211000022278414 chrX_DS484809v1_random 1453 unlocalized chrX primary NW_001846098.1,DS484809.1,211000022278252 chrX_DS484810v1_random 1452 unlocalized chrX primary NW_001846099.1,DS484810.1,211000022278690 chrX_DS484811v1_random 1452 unlocalized chrX primary NW_001846100.1,DS484811.1,211000022278618 chrX_DS484819v1_random 1441 unlocalized chrX primary NW_001846108.1,DS484819.1,211000022278340 chrX_DS484826v1_random 1432 unlocalized chrX primary NW_001846115.1,DS484826.1,211000022279437 chrX_DS484832v1_random 1425 unlocalized chrX primary NW_001846121.1,DS484832.1,211000022279112 chrX_DS484833v1_random 1424 unlocalized chrX primary NW_001846122.1,DS484833.1,211000022278322 chrX_DS484837v1_random 1423 unlocalized chrX primary NW_001846126.1,DS484837.1,211000022278838 chrX_DS484839v1_random 1421 unlocalized chrX primary NW_001846128.1,DS484839.1,211000022279068 chrX_DS484840v1_random 1419 unlocalized chrX primary NW_001846129.1,DS484840.1,211000022278837 chrX_DS484845v1_random 1412 unlocalized chrX primary NW_001846134.1,DS484845.1,211000022278342 chrX_DS484850v1_random 1408 unlocalized chrX primary NW_001846139.1,DS484850.1,211000022278646 chrX_DS484857v1_random 1402 unlocalized chrX primary NW_001846146.1,DS484857.1,211000022279888 chrX_DS484871v1_random 1386 unlocalized chrX primary NW_001846160.1,DS484871.1,211000022278822 chrX_DS484879v1_random 1381 unlocalized chrX primary NW_001846168.1,DS484879.1,211000022278644 chrX_DS484880v1_random 1380 unlocalized chrX primary NW_001846169.1,DS484880.1,211000022278836 chrX_DS484890v1_random 1376 unlocalized chrX primary NW_001846179.1,DS484890.1,211000022278855 chrX_DS484907v1_random 1361 unlocalized chrX primary NW_001846196.1,DS484907.1,211000022280022 chrX_DS484911v1_random 1355 unlocalized chrX primary NW_001846200.1,DS484911.1,211000022278609 chrX_DS484913v1_random 1355 unlocalized chrX primary NW_001846202.1,DS484913.1,211000022278476 chrX_DS484928v1_random 1340 unlocalized chrX primary NW_001846217.1,DS484928.1,211000022279073 chrX_DS484935v1_random 1336 unlocalized chrX primary NW_001846224.1,DS484935.1,211000022278832 chrX_DS484951v1_random 1327 unlocalized chrX primary NW_001846240.1,DS484951.1,211000022278470 chrX_DS484952v1_random 1326 unlocalized chrX primary NW_001846241.1,DS484952.1,211000022279079 chrX_DS484953v1_random 1326 unlocalized chrX primary NW_001846242.1,DS484953.1,211000022280034 chrX_DS484955v1_random 1323 unlocalized chrX primary NW_001846244.1,DS484955.1,211000022278830 chrX_DS484961v1_random 1315 unlocalized chrX primary NW_001846250.1,DS484961.1,211000022278492 chrX_DS484963v1_random 1315 unlocalized chrX primary NW_001846252.1,DS484963.1,211000022279674 chrX_DS484965v1_random 1312 unlocalized chrX primary NW_001846254.1,DS484965.1,211000022278268 chrX_DS484968v1_random 1311 unlocalized chrX primary NW_001846257.1,DS484968.1,211000022278122 chrX_DS484970v1_random 1310 unlocalized chrX primary NW_001846259.1,DS484970.1,211000022279944 chrX_DS484974v1_random 1309 unlocalized chrX primary NW_001846263.1,DS484974.1,211000022279388 chrX_DS484978v1_random 1306 unlocalized chrX primary NW_001846267.1,DS484978.1,211000022279767 chrX_DS484990v1_random 1301 unlocalized chrX primary NW_001846279.1,DS484990.1,211000022279984 chrX_DS484995v1_random 1296 unlocalized chrX primary NW_001846284.1,DS484995.1,211000022278607 chrX_DS484996v1_random 1295 unlocalized chrX primary NW_001846285.1,DS484996.1,211000022278487 chrX_DS484997v1_random 1294 unlocalized chrX primary NW_001846286.1,DS484997.1,211000022280007 chrX_DS485012v1_random 1284 unlocalized chrX primary NW_001846301.1,DS485012.1,211000022279328 chrX_DS485015v1_random 1283 unlocalized chrX primary NW_001846304.1,DS485015.1,211000022278324 chrX_DS485017v1_random 1281 unlocalized chrX primary NW_001846306.1,DS485017.1,211000022279998 chrX_DS485043v1_random 1271 unlocalized chrX primary NW_001846332.1,DS485043.1,211000022278856 chrX_DS485044v1_random 1271 unlocalized chrX primary NW_001846333.1,DS485044.1,211000022279978 chrX_DS485049v1_random 1269 unlocalized chrX primary NW_001846338.1,DS485049.1,211000022279764 chrX_DS485050v1_random 1268 unlocalized chrX primary NW_001846339.1,DS485050.1,211000022279045 chrX_DS485054v1_random 1265 unlocalized chrX primary NW_001846343.1,DS485054.1,211000022279721 chrX_DS485072v1_random 1260 unlocalized chrX primary NW_001846361.1,DS485072.1,211000022279528 chrX_DS485074v1_random 1258 unlocalized chrX primary NW_001846363.1,DS485074.1,211000022278382 chrX_DS485077v1_random 1258 unlocalized chrX primary NW_001846366.1,DS485077.1,211000022278187 chrX_DS485078v1_random 1257 unlocalized chrX primary NW_001846367.1,DS485078.1,211000022279610 chrX_DS485080v1_random 1253 unlocalized chrX primary NW_001846369.1,DS485080.1,211000022279071 chrX_DS485081v1_random 1252 unlocalized chrX primary NW_001846370.1,DS485081.1,211000022278691 chrX_DS485084v1_random 1251 unlocalized chrX primary NW_001846373.1,DS485084.1,211000022278843 chrX_DS485096v1_random 1244 unlocalized chrX primary NW_001846385.1,DS485096.1,211000022278478 chrX_DS485101v1_random 1241 unlocalized chrX primary NW_001846390.1,DS485101.1,211000022278631 chrX_DS485104v1_random 1240 unlocalized chrX primary NW_001846393.1,DS485104.1,211000022278505 chrX_DS485109v1_random 1238 unlocalized chrX primary NW_001846398.1,DS485109.1,211000022278814 chrX_DS485110v1_random 1238 unlocalized chrX primary NW_001846399.1,DS485110.1,211000022278640 chrX_DS485111v1_random 1238 unlocalized chrX primary NW_001846400.1,DS485111.1,211000022278882 chrX_DS485112v1_random 1238 unlocalized chrX primary NW_001846401.1,DS485112.1,211000022278971 chrX_DS485119v1_random 1235 unlocalized chrX primary NW_001846408.1,DS485119.1,211000022279570 chrX_DS485126v1_random 1233 unlocalized chrX primary NW_001846415.1,DS485126.1,211000022278654 chrX_DS485141v1_random 1228 unlocalized chrX primary NW_001846430.1,DS485141.1,211000022278632 chrX_DS485164v1_random 1223 unlocalized chrX primary NW_001846453.1,DS485164.1,211000022278624 chrX_DS485167v1_random 1221 unlocalized chrX primary NW_001846456.1,DS485167.1,211000022278637 chrX_DS485172v1_random 1220 unlocalized chrX primary NW_001846461.1,DS485172.1,211000022278297 chrX_DS485186v1_random 1212 unlocalized chrX primary NW_001846475.1,DS485186.1,211000022279860 chrX_DS485189v1_random 1211 unlocalized chrX primary NW_001846478.1,DS485189.1,211000022279300 chrX_DS485195v1_random 1209 unlocalized chrX primary NW_001846484.1,DS485195.1,211000022279302 chrX_DS485201v1_random 1208 unlocalized chrX primary NW_001846490.1,DS485201.1,211000022279862 chrX_DS485225v1_random 1200 unlocalized chrX primary NW_001846514.1,DS485225.1,211000022279531 chrX_DS485235v1_random 1195 unlocalized chrX primary NW_001846524.1,DS485235.1,211000022278231 chrX_DS485238v1_random 1195 unlocalized chrX primary NW_001846527.1,DS485238.1,211000022278466 chrX_DS485257v1_random 1189 unlocalized chrX primary NW_001846546.1,DS485257.1,211000022278479 chrX_DS485262v1_random 1189 unlocalized chrX primary NW_001846551.1,DS485262.1,211000022278925 chrX_DS485266v1_random 1186 unlocalized chrX primary NW_001846555.1,DS485266.1,211000022278355 chrX_DS485268v1_random 1186 unlocalized chrX primary NW_001846557.1,DS485268.1,211000022279536 chrX_DS485271v1_random 1185 unlocalized chrX primary NW_001846560.1,DS485271.1,211000022279290 chrX_DS485277v1_random 1184 unlocalized chrX primary NW_001846566.1,DS485277.1,211000022278910 chrX_DS485278v1_random 1184 unlocalized chrX primary NW_001846567.1,DS485278.1,211000022279339 chrX_DS485281v1_random 1184 unlocalized chrX primary NW_001846570.1,DS485281.1,211000022279830 chrX_DS485287v1_random 1181 unlocalized chrX primary NW_001846576.1,DS485287.1,211000022280077 chrX_DS485299v1_random 1178 unlocalized chrX primary NW_001846588.1,DS485299.1,211000022279505 chrX_DS485300v1_random 1178 unlocalized chrX primary NW_001846589.1,DS485300.1,211000022279012 chrX_DS485303v1_random 1175 unlocalized chrX primary NW_001846592.1,DS485303.1,211000022279501 chrX_DS485305v1_random 1174 unlocalized chrX primary NW_001846594.1,DS485305.1,211000022278610 chrX_DS485310v1_random 1173 unlocalized chrX primary NW_001846599.1,DS485310.1,211000022279803 chrX_DS485334v1_random 1164 unlocalized chrX primary NW_001846623.1,DS485334.1,211000022278950 chrX_DS485336v1_random 1163 unlocalized chrX primary NW_001846625.1,DS485336.1,211000022279006 chrX_DS485345v1_random 1161 unlocalized chrX primary NW_001846634.1,DS485345.1,211000022279833 chrX_DS485351v1_random 1161 unlocalized chrX primary NW_001846640.1,DS485351.1,211000022279304 chrX_DS485358v1_random 1159 unlocalized chrX primary NW_001846647.1,DS485358.1,211000022278477 chrX_DS485360v1_random 1159 unlocalized chrX primary NW_001846649.1,DS485360.1,211000022279857 chrX_DS485364v1_random 1158 unlocalized chrX primary NW_001846653.1,DS485364.1,211000022279773 chrX_DS485378v1_random 1155 unlocalized chrX primary NW_001846667.1,DS485378.1,211000022278892 chrX_DS485384v1_random 1153 unlocalized chrX primary NW_001846673.1,DS485384.1,211000022279881 chrX_DS485418v1_random 1145 unlocalized chrX primary NW_001846707.1,DS485418.1,211000022279690 chrX_DS485454v1_random 1135 unlocalized chrX primary NW_001846743.1,DS485454.1,211000022279543 chrX_DS485459v1_random 1134 unlocalized chrX primary NW_001846748.1,DS485459.1,211000022280017 chrX_DS485465v1_random 1133 unlocalized chrX primary NW_001846754.1,DS485465.1,211000022278516 chrX_DS485471v1_random 1131 unlocalized chrX primary NW_001846760.1,DS485471.1,211000022278906 chrX_DS485476v1_random 1130 unlocalized chrX primary NW_001846765.1,DS485476.1,211000022278485 chrX_DS485478v1_random 1129 unlocalized chrX primary NW_001846767.1,DS485478.1,211000022278933 chrX_DS485514v1_random 1121 unlocalized chrX primary NW_001846803.1,DS485514.1,211000022278360 chrX_DS485537v1_random 1115 unlocalized chrX primary NW_001846826.1,DS485537.1,211000022279108 chrX_DS485549v1_random 1112 unlocalized chrX primary NW_001846838.1,DS485549.1,211000022280023 chrX_DS485550v1_random 1112 unlocalized chrX primary NW_001846839.1,DS485550.1,211000022280173 chrX_DS485562v1_random 1109 unlocalized chrX primary NW_001846851.1,DS485562.1,211000022279859 chrX_DS485573v1_random 1107 unlocalized chrX primary NW_001846862.1,DS485573.1,211000022278725 chrX_DS485592v1_random 1102 unlocalized chrX primary NW_001846881.1,DS485592.1,211000022279604 chrX_DS485597v1_random 1100 unlocalized chrX primary NW_001846886.1,DS485597.1,211000022279832 chrX_DS485599v1_random 1100 unlocalized chrX primary NW_001846888.1,DS485599.1,211000022278880 chrX_DS485603v1_random 1098 unlocalized chrX primary NW_001846892.1,DS485603.1,211000022279227 chrX_DS485606v1_random 1097 unlocalized chrX primary NW_001846895.1,DS485606.1,211000022278326 chrX_DS485617v1_random 1093 unlocalized chrX primary NW_001846906.1,DS485617.1,211000022279067 chrX_DS485618v1_random 1092 unlocalized chrX primary NW_001846907.1,DS485618.1,211000022278236 chrX_DS485620v1_random 1091 unlocalized chrX primary NW_001846909.1,DS485620.1,211000022278833 chrX_DS485635v1_random 1088 unlocalized chrX primary NW_001846924.1,DS485635.1,211000022278909 chrX_DS485647v1_random 1086 unlocalized chrX primary NW_001846936.1,DS485647.1,211000022279605 chrX_DS485649v1_random 1084 unlocalized chrX primary NW_001846938.1,DS485649.1,211000022278486 chrX_DS485651v1_random 1084 unlocalized chrX primary NW_001846940.1,DS485651.1,211000022280019 chrX_DS485660v1_random 1082 unlocalized chrX primary NW_001846949.1,DS485660.1,211000022278623 chrX_DS485672v1_random 1078 unlocalized chrX primary NW_001846961.1,DS485672.1,211000022279467 chrX_DS485676v1_random 1078 unlocalized chrX primary NW_001846965.1,DS485676.1,211000022278524 chrX_DS485687v1_random 1075 unlocalized chrX primary NW_001846976.1,DS485687.1,211000022278813 chrX_DS485691v1_random 1074 unlocalized chrX primary NW_001846980.1,DS485691.1,211000022278704 chrX_DS485707v1_random 1071 unlocalized chrX primary NW_001846996.1,DS485707.1,211000022279882 chrX_DS485723v1_random 1067 unlocalized chrX primary NW_001847012.1,DS485723.1,211000022278635 chrX_DS485735v1_random 1063 unlocalized chrX primary NW_001847024.1,DS485735.1,211000022278534 chrX_DS485738v1_random 1063 unlocalized chrX primary NW_001847027.1,DS485738.1,211000022279306 chrX_DS485745v1_random 1062 unlocalized chrX primary NW_001847034.1,DS485745.1,211000022278852 chrX_DS485756v1_random 1058 unlocalized chrX primary NW_001847045.1,DS485756.1,211000022280125 chrX_DS485762v1_random 1057 unlocalized chrX primary NW_001847051.1,DS485762.1,211000022279327 chrX_DS485765v1_random 1056 unlocalized chrX primary NW_001847054.1,DS485765.1,211000022278417 chrX_DS485769v1_random 1055 unlocalized chrX primary NW_001847058.1,DS485769.1,211000022278459 chrX_DS485771v1_random 1055 unlocalized chrX primary NW_001847060.1,DS485771.1,211000022278841 chrX_DS485778v1_random 1053 unlocalized chrX primary NW_001847067.1,DS485778.1,211000022279861 chrX_DS485782v1_random 1052 unlocalized chrX primary NW_001847071.1,DS485782.1,211000022278835 chrX_DS485785v1_random 1051 unlocalized chrX primary NW_001847074.1,DS485785.1,211000022278647 chrX_DS485790v1_random 1051 unlocalized chrX primary NW_001847079.1,DS485790.1,211000022279291 chrX_DS485797v1_random 1049 unlocalized chrX primary NW_001847086.1,DS485797.1,211000022278237 chrX_DS485798v1_random 1049 unlocalized chrX primary NW_001847087.1,DS485798.1,211000022279086 chrX_DS485801v1_random 1048 unlocalized chrX primary NW_001847090.1,DS485801.1,211000022278705 chrX_DS485813v1_random 1047 unlocalized chrX primary NW_001847102.1,DS485813.1,211000022278504 chrX_DS485816v1_random 1046 unlocalized chrX primary NW_001847105.1,DS485816.1,211000022279438 chrX_DS485836v1_random 1042 unlocalized chrX primary NW_001847125.1,DS485836.1,211000022279083 chrX_DS485845v1_random 1040 unlocalized chrX primary NW_001847134.1,DS485845.1,211000022278715 chrX_DS485852v1_random 1038 unlocalized chrX primary NW_001847141.1,DS485852.1,211000022278824 chrX_DS485855v1_random 1037 unlocalized chrX primary NW_001847144.1,DS485855.1,211000022278617 chrX_DS485856v1_random 1037 unlocalized chrX primary NW_001847145.1,DS485856.1,211000022278818 chrX_DS485857v1_random 1037 unlocalized chrX primary NW_001847146.1,DS485857.1,211000022279518 chrX_DS485860v1_random 1036 unlocalized chrX primary NW_001847149.1,DS485860.1,211000022278596 chrX_DS485879v1_random 1031 unlocalized chrX primary NW_001847168.1,DS485879.1,211000022279315 chrX_DS485898v1_random 1028 unlocalized chrX primary NW_001847187.1,DS485898.1,211000022278834 chrX_DS485899v1_random 1027 unlocalized chrX primary NW_001847188.1,DS485899.1,211000022279111 chrX_DS485909v1_random 1023 unlocalized chrX primary NW_001847198.1,DS485909.1,211000022278669 chrX_DS485913v1_random 1022 unlocalized chrX primary NW_001847202.1,DS485913.1,211000022278474 chrX_DS485934v1_random 1019 unlocalized chrX primary NW_001847223.1,DS485934.1,211000022278638 chrX_DS485941v1_random 1018 unlocalized chrX primary NW_001847230.1,DS485941.1,211000022278626 chrX_DS485942v1_random 1018 unlocalized chrX primary NW_001847231.1,DS485942.1,211000022278350 chrX_DS485950v1_random 1015 unlocalized chrX primary NW_001847239.1,DS485950.1,211000022279113 chrX_DS485959v1_random 1013 unlocalized chrX primary NW_001847248.1,DS485959.1,211000022279010 chrX_DS485962v1_random 1012 unlocalized chrX primary NW_001847251.1,DS485962.1,211000022278458 chrX_DS485967v1_random 1011 unlocalized chrX primary NW_001847256.1,DS485967.1,211000022278483 chrX_DS485978v1_random 1008 unlocalized chrX primary NW_001847267.1,DS485978.1,211000022279720 chrX_DS485981v1_random 1007 unlocalized chrX primary NW_001847270.1,DS485981.1,211000022278488 chrX_DS485987v1_random 1005 unlocalized chrX primary NW_001847276.1,DS485987.1,211000022278811 chrX_DS485994v1_random 1004 unlocalized chrX primary NW_001847283.1,DS485994.1,211000022278230 chrY_CP007107v1_random 73091 unlocalized chrY primary NW_007931108.1,CP007107.1,Y_mapped_Scaffold_5 chrY_CP007108v1_random 66731 unlocalized chrY primary NW_007931109.1,CP007108.1,Y_mapped_Scaffold_9 chrY_CP007109v1_random 66439 unlocalized chrY primary NW_007931110.1,CP007109.1,Y_mapped_Scaffold_12 chrY_CP007110v1_random 33316 unlocalized chrY primary NW_007931111.1,CP007110.1,Y_mapped_Scaffold_15 chrY_CP007111v1_random 34521 unlocalized chrY primary NW_007931112.1,CP007111.1,Y_mapped_Scaffold_18 chrY_CP007112v1_random 39041 unlocalized chrY primary NW_007931113.1,CP007112.1,Y_mapped_Scaffold_20 chrY_CP007113v1_random 34359 unlocalized chrY primary NW_007931114.1,CP007113.1,Y_mapped_Scaffold_21 chrY_CP007114v1_random 31460 unlocalized chrY primary NW_007931115.1,CP007114.1,Y_mapped_Scaffold_23 chrY_CP007115v1_random 21921 unlocalized chrY primary NW_007931116.1,CP007115.1,Y_mapped_Scaffold_26 chrY_CP007116v1_random 25805 unlocalized chrY primary NW_007931117.1,CP007116.1,Y_mapped_Scaffold_30 chrY_CP007117v1_random 24380 unlocalized chrY primary NW_007931118.1,CP007117.1,Y_mapped_Scaffold_34 chrY_CP007118v1_random 44104 unlocalized chrY primary NW_007931119.1,CP007118.1,Y_mapped_Scaffold_53 chrY_CP007119v1_random 11498 unlocalized chrY primary NW_007931120.1,CP007119.1,211000022279762 chrY_DS483677v1_random 12513 unlocalized chrY primary NW_001844966.1,DS483677.1,211000022280742 chrY_DS483690v1_random 12001 unlocalized chrY primary NW_001844979.1,DS483690.1,211000022280763 chrY_DS483725v1_random 13079 unlocalized chrY primary NW_001845014.1,DS483725.1,211000022280187 chrY_DS483742v1_random 11763 unlocalized chrY primary NW_001845031.1,DS483742.1,211000022279681 chrY_DS483778v1_random 5984 unlocalized chrY primary NW_001845067.1,DS483778.1,211000022278684 chrY_DS483788v1_random 5564 unlocalized chrY primary NW_001845077.1,DS483788.1,211000022280748 chrY_DS483790v1_random 5520 unlocalized chrY primary NW_001845079.1,DS483790.1,211000022279688 chrY_DS483875v1_random 4197 unlocalized chrY primary NW_001845164.1,DS483875.1,211000022280494 chrY_DS483889v1_random 4059 unlocalized chrY primary NW_001845178.1,DS483889.1,211000022280504 chrY_DS483931v1_random 3713 unlocalized chrY primary NW_001845220.1,DS483931.1,211000022280481 chrY_DS483959v1_random 3537 unlocalized chrY primary NW_001845248.1,DS483959.1,211000022278601 chrY_DS483966v1_random 3502 unlocalized chrY primary NW_001845255.1,DS483966.1,211000022279030 chrY_DS483967v1_random 3499 unlocalized chrY primary NW_001845256.1,DS483967.1,211000022279468 chrY_DS483987v1_random 3375 unlocalized chrY primary NW_001845276.1,DS483987.1,211000022278795 chrY_DS483988v1_random 3374 unlocalized chrY primary NW_001845277.1,DS483988.1,211000022279951 chrY_DS483996v1_random 3341 unlocalized chrY primary NW_001845285.1,DS483996.1,211000022280483 chrY_DS484021v1_random 3213 unlocalized chrY primary NW_001845310.1,DS484021.1,211000022278218 chrY_DS484029v1_random 3195 unlocalized chrY primary NW_001845318.1,DS484029.1,211000022280619 chrY_DS484037v1_random 3173 unlocalized chrY primary NW_001845326.1,DS484037.1,211000022279224 chrY_DS484043v1_random 3154 unlocalized chrY primary NW_001845332.1,DS484043.1,211000022279649 chrY_DS484049v1_random 3102 unlocalized chrY primary NW_001845338.1,DS484049.1,211000022279186 chrY_DS484056v1_random 3077 unlocalized chrY primary NW_001845345.1,DS484056.1,211000022278895 chrY_DS484063v1_random 3046 unlocalized chrY primary NW_001845352.1,DS484063.1,211000022279642 chrY_DS484094v1_random 2922 unlocalized chrY primary NW_001845383.1,DS484094.1,211000022280686 chrY_DS484103v1_random 2899 unlocalized chrY primary NW_001845392.1,DS484103.1,211000022279532 chrY_DS484128v1_random 2836 unlocalized chrY primary NW_001845417.1,DS484128.1,211000022279382 chrY_DS484142v1_random 2815 unlocalized chrY primary NW_001845431.1,DS484142.1,211000022278436 chrY_DS484146v1_random 2799 unlocalized chrY primary NW_001845435.1,DS484146.1,211000022278586 chrY_DS484164v1_random 2762 unlocalized chrY primary NW_001845453.1,DS484164.1,211000022278734 chrY_DS484171v1_random 2728 unlocalized chrY primary NW_001845460.1,DS484171.1,211000022279709 chrY_DS484175v1_random 2709 unlocalized chrY primary NW_001845464.1,DS484175.1,211000022280138 chrY_DS484181v1_random 2694 unlocalized chrY primary NW_001845470.1,DS484181.1,211000022279755 chrY_DS484184v1_random 2688 unlocalized chrY primary NW_001845473.1,DS484184.1,211000022278278 chrY_DS484197v1_random 2642 unlocalized chrY primary NW_001845486.1,DS484197.1,211000022279046 chrY_DS484233v1_random 2565 unlocalized chrY primary NW_001845522.1,DS484233.1,211000022278509 chrY_DS484249v1_random 2522 unlocalized chrY primary NW_001845538.1,DS484249.1,211000022279261 chrY_DS484250v1_random 2521 unlocalized chrY primary NW_001845539.1,DS484250.1,211000022278743 chrY_DS484259v1_random 2508 unlocalized chrY primary NW_001845548.1,DS484259.1,211000022278683 chrY_DS484266v1_random 2477 unlocalized chrY primary NW_001845555.1,DS484266.1,211000022278802 chrY_DS484270v1_random 2473 unlocalized chrY primary NW_001845559.1,DS484270.1,211000022278510 chrY_DS484336v1_random 2342 unlocalized chrY primary NW_001845625.1,DS484336.1,211000022279334 chrY_DS484351v1_random 2303 unlocalized chrY primary NW_001845640.1,DS484351.1,211000022278577 chrY_DS484377v1_random 2232 unlocalized chrY primary NW_001845666.1,DS484377.1,211000022280024 chrY_DS484390v1_random 2206 unlocalized chrY primary NW_001845679.1,DS484390.1,211000022279932 chrY_DS484441v1_random 2096 unlocalized chrY primary NW_001845730.1,DS484441.1,211000022279583 chrY_DS484465v1_random 2063 unlocalized chrY primary NW_001845754.1,DS484465.1,211000022279937 chrY_DS484492v1_random 2005 unlocalized chrY primary NW_001845781.1,DS484492.1,211000022278984 chrY_DS484523v1_random 1961 unlocalized chrY primary NW_001845812.1,DS484523.1,211000022279268 chrY_DS484530v1_random 1947 unlocalized chrY primary NW_001845819.1,DS484530.1,211000022278449 chrY_DS484531v1_random 1946 unlocalized chrY primary NW_001845820.1,DS484531.1,211000022279795 chrY_DS484574v1_random 1890 unlocalized chrY primary NW_001845863.1,DS484574.1,211000022279104 chrY_DS484589v1_random 1863 unlocalized chrY primary NW_001845878.1,DS484589.1,211000022279494 chrY_DS484631v1_random 1775 unlocalized chrY primary NW_001845920.1,DS484631.1,211000022278941 chrY_DS484637v1_random 1766 unlocalized chrY primary NW_001845926.1,DS484637.1,211000022279123 chrY_DS484641v1_random 1756 unlocalized chrY primary NW_001845930.1,DS484641.1,211000022279989 chrY_DS484643v1_random 1751 unlocalized chrY primary NW_001845932.1,DS484643.1,211000022278565 chrY_DS484665v1_random 1712 unlocalized chrY primary NW_001845954.1,DS484665.1,211000022279026 chrY_DS484674v1_random 1690 unlocalized chrY primary NW_001845963.1,DS484674.1,211000022279936 chrY_DS484675v1_random 1690 unlocalized chrY primary NW_001845964.1,DS484675.1,211000022279025 chrY_DS484680v1_random 1683 unlocalized chrY primary NW_001845969.1,DS484680.1,211000022279582 chrY_DS484681v1_random 1683 unlocalized chrY primary NW_001845970.1,DS484681.1,211000022278709 chrY_DS484696v1_random 1637 unlocalized chrY primary NW_001845985.1,DS484696.1,211000022279680 chrY_DS484706v1_random 1619 unlocalized chrY primary NW_001845995.1,DS484706.1,211000022279090 chrY_DS484757v1_random 1525 unlocalized chrY primary NW_001846046.1,DS484757.1,211000022279870 chrY_DS484781v1_random 1485 unlocalized chrY primary NW_001846070.1,DS484781.1,211000022278872 chrY_DS484805v1_random 1459 unlocalized chrY primary NW_001846094.1,DS484805.1,211000022278214 chrY_DS484807v1_random 1456 unlocalized chrY primary NW_001846096.1,DS484807.1,211000022279963 chrY_DS484818v1_random 1443 unlocalized chrY primary NW_001846107.1,DS484818.1,211000022278997 chrY_DS484820v1_random 1440 unlocalized chrY primary NW_001846109.1,DS484820.1,211000022279876 chrY_DS484830v1_random 1429 unlocalized chrY primary NW_001846119.1,DS484830.1,211000022279950 chrY_DS484863v1_random 1393 unlocalized chrY primary NW_001846152.1,DS484863.1,211000022279279 chrY_DS484875v1_random 1383 unlocalized chrY primary NW_001846164.1,DS484875.1,211000022280116 chrY_DS484876v1_random 1382 unlocalized chrY primary NW_001846165.1,DS484876.1,211000022279907 chrY_DS484908v1_random 1360 unlocalized chrY primary NW_001846197.1,DS484908.1,211000022279484 chrY_DS484909v1_random 1356 unlocalized chrY primary NW_001846198.1,DS484909.1,211000022279392 chrY_DS484924v1_random 1341 unlocalized chrY primary NW_001846213.1,DS484924.1,211000022280044 chrY_DS484942v1_random 1333 unlocalized chrY primary NW_001846231.1,DS484942.1,211000022279550 chrY_DS484945v1_random 1330 unlocalized chrY primary NW_001846234.1,DS484945.1,211000022279485 chrY_DS484956v1_random 1322 unlocalized chrY primary NW_001846245.1,DS484956.1,211000022279404 chrY_DS484983v1_random 1304 unlocalized chrY primary NW_001846272.1,DS484983.1,211000022279560 chrY_DS484986v1_random 1303 unlocalized chrY primary NW_001846275.1,DS484986.1,211000022278722 chrY_DS484992v1_random 1297 unlocalized chrY primary NW_001846281.1,DS484992.1,211000022278153 chrY_DS484994v1_random 1297 unlocalized chrY primary NW_001846283.1,DS484994.1,211000022279319 chrY_DS485013v1_random 1284 unlocalized chrY primary NW_001846302.1,DS485013.1,211000022278405 chrY_DS485014v1_random 1283 unlocalized chrY primary NW_001846303.1,DS485014.1,211000022279835 chrY_DS485016v1_random 1282 unlocalized chrY primary NW_001846305.1,DS485016.1,211000022278418 chrY_DS485028v1_random 1277 unlocalized chrY primary NW_001846317.1,DS485028.1,211000022280157 chrY_DS485042v1_random 1271 unlocalized chrY primary NW_001846331.1,DS485042.1,211000022279269 chrY_DS485048v1_random 1270 unlocalized chrY primary NW_001846337.1,DS485048.1,211000022279496 chrY_DS485051v1_random 1268 unlocalized chrY primary NW_001846340.1,DS485051.1,211000022278791 chrY_DS485070v1_random 1260 unlocalized chrY primary NW_001846359.1,DS485070.1,211000022278756 chrY_DS485097v1_random 1243 unlocalized chrY primary NW_001846386.1,DS485097.1,211000022279725 chrY_DS485099v1_random 1241 unlocalized chrY primary NW_001846388.1,DS485099.1,211000022279491 chrY_DS485113v1_random 1237 unlocalized chrY primary NW_001846402.1,DS485113.1,211000022278135 chrY_DS485137v1_random 1230 unlocalized chrY primary NW_001846426.1,DS485137.1,211000022279678 chrY_DS485143v1_random 1227 unlocalized chrY primary NW_001846432.1,DS485143.1,211000022279918 chrY_DS485158v1_random 1224 unlocalized chrY primary NW_001846447.1,DS485158.1,211000022279047 chrY_DS485159v1_random 1224 unlocalized chrY primary NW_001846448.1,DS485159.1,211000022278798 chrY_DS485166v1_random 1222 unlocalized chrY primary NW_001846455.1,DS485166.1,211000022278935 chrY_DS485178v1_random 1218 unlocalized chrY primary NW_001846467.1,DS485178.1,211000022279335 chrY_DS485219v1_random 1202 unlocalized chrY primary NW_001846508.1,DS485219.1,211000022280090 chrY_DS485236v1_random 1195 unlocalized chrY primary NW_001846525.1,DS485236.1,211000022279174 chrY_DS485250v1_random 1192 unlocalized chrY primary NW_001846539.1,DS485250.1,211000022278990 chrY_DS485267v1_random 1186 unlocalized chrY primary NW_001846556.1,DS485267.1,211000022278142 chrY_DS485283v1_random 1182 unlocalized chrY primary NW_001846572.1,DS485283.1,211000022279974 chrY_DS485288v1_random 1181 unlocalized chrY primary NW_001846577.1,DS485288.1,211000022279831 chrY_DS485302v1_random 1176 unlocalized chrY primary NW_001846591.1,DS485302.1,211000022279452 chrY_DS485315v1_random 1171 unlocalized chrY primary NW_001846604.1,DS485315.1,211000022279679 chrY_DS485316v1_random 1171 unlocalized chrY primary NW_001846605.1,DS485316.1,211000022279999 chrY_DS485318v1_random 1170 unlocalized chrY primary NW_001846607.1,DS485318.1,211000022279669 chrY_DS485320v1_random 1169 unlocalized chrY primary NW_001846609.1,DS485320.1,211000022279410 chrY_DS485328v1_random 1166 unlocalized chrY primary NW_001846617.1,DS485328.1,211000022279333 chrY_DS485329v1_random 1166 unlocalized chrY primary NW_001846618.1,DS485329.1,211000022279266 chrY_DS485335v1_random 1163 unlocalized chrY primary NW_001846624.1,DS485335.1,211000022279986 chrY_DS485343v1_random 1162 unlocalized chrY primary NW_001846632.1,DS485343.1,211000022279280 chrY_DS485359v1_random 1159 unlocalized chrY primary NW_001846648.1,DS485359.1,211000022279164 chrY_DS485363v1_random 1158 unlocalized chrY primary NW_001846652.1,DS485363.1,211000022279511 chrY_DS485374v1_random 1155 unlocalized chrY primary NW_001846663.1,DS485374.1,211000022279153 chrY_DS485375v1_random 1155 unlocalized chrY primary NW_001846664.1,DS485375.1,211000022278499 chrY_DS485388v1_random 1152 unlocalized chrY primary NW_001846677.1,DS485388.1,211000022278995 chrY_DS485399v1_random 1148 unlocalized chrY primary NW_001846688.1,DS485399.1,211000022279181 chrY_DS485409v1_random 1147 unlocalized chrY primary NW_001846698.1,DS485409.1,211000022279352 chrY_DS485416v1_random 1146 unlocalized chrY primary NW_001846705.1,DS485416.1,211000022279935 chrY_DS485422v1_random 1144 unlocalized chrY primary NW_001846711.1,DS485422.1,211000022279901 chrY_DS485423v1_random 1144 unlocalized chrY primary NW_001846712.1,DS485423.1,211000022278760 chrY_DS485427v1_random 1142 unlocalized chrY primary NW_001846716.1,DS485427.1,211000022278936 chrY_DS485430v1_random 1141 unlocalized chrY primary NW_001846719.1,DS485430.1,211000022279995 chrY_DS485436v1_random 1140 unlocalized chrY primary NW_001846725.1,DS485436.1,211000022279938 chrY_DS485440v1_random 1139 unlocalized chrY primary NW_001846729.1,DS485440.1,211000022279458 chrY_DS485450v1_random 1136 unlocalized chrY primary NW_001846739.1,DS485450.1,211000022279941 chrY_DS485452v1_random 1136 unlocalized chrY primary NW_001846741.1,DS485452.1,211000022279391 chrY_DS485460v1_random 1134 unlocalized chrY primary NW_001846749.1,DS485460.1,211000022278450 chrY_DS485470v1_random 1132 unlocalized chrY primary NW_001846759.1,DS485470.1,211000022279799 chrY_DS485473v1_random 1131 unlocalized chrY primary NW_001846762.1,DS485473.1,211000022279800 chrY_DS485483v1_random 1129 unlocalized chrY primary NW_001846772.1,DS485483.1,211000022278987 chrY_DS485492v1_random 1126 unlocalized chrY primary NW_001846781.1,DS485492.1,211000022278959 chrY_DS485512v1_random 1122 unlocalized chrY primary NW_001846801.1,DS485512.1,211000022279910 chrY_DS485523v1_random 1118 unlocalized chrY primary NW_001846812.1,DS485523.1,211000022279165 chrY_DS485532v1_random 1116 unlocalized chrY primary NW_001846821.1,DS485532.1,211000022279546 chrY_DS485534v1_random 1116 unlocalized chrY primary NW_001846823.1,DS485534.1,211000022278736 chrY_DS485552v1_random 1111 unlocalized chrY primary NW_001846841.1,DS485552.1,211000022279813 chrY_DS485560v1_random 1110 unlocalized chrY primary NW_001846849.1,DS485560.1,211000022279236 chrY_DS485561v1_random 1109 unlocalized chrY primary NW_001846850.1,DS485561.1,211000022278873 chrY_DS485575v1_random 1106 unlocalized chrY primary NW_001846864.1,DS485575.1,211000022279005 chrY_DS485594v1_random 1101 unlocalized chrY primary NW_001846883.1,DS485594.1,211000022278201 chrY_DS485604v1_random 1098 unlocalized chrY primary NW_001846893.1,DS485604.1,211000022279586 chrY_DS485625v1_random 1090 unlocalized chrY primary NW_001846914.1,DS485625.1,211000022279661 chrY_DS485641v1_random 1087 unlocalized chrY primary NW_001846930.1,DS485641.1,211000022279403 chrY_DS485646v1_random 1086 unlocalized chrY primary NW_001846935.1,DS485646.1,211000022278803 chrY_DS485685v1_random 1075 unlocalized chrY primary NW_001846974.1,DS485685.1,211000022279459 chrY_DS485696v1_random 1073 unlocalized chrY primary NW_001846985.1,DS485696.1,211000022279007 chrY_DS485698v1_random 1072 unlocalized chrY primary NW_001846987.1,DS485698.1,211000022279988 chrY_DS485718v1_random 1068 unlocalized chrY primary NW_001847007.1,DS485718.1,211000022279486 chrY_DS485732v1_random 1064 unlocalized chrY primary NW_001847021.1,DS485732.1,211000022279137 chrY_DS485736v1_random 1063 unlocalized chrY primary NW_001847025.1,DS485736.1,211000022278787 chrY_DS485739v1_random 1063 unlocalized chrY primary NW_001847028.1,DS485739.1,211000022279385 chrY_DS485749v1_random 1060 unlocalized chrY primary NW_001847038.1,DS485749.1,211000022279031 chrY_DS485752v1_random 1059 unlocalized chrY primary NW_001847041.1,DS485752.1,211000022279034 chrY_DS485755v1_random 1058 unlocalized chrY primary NW_001847044.1,DS485755.1,211000022279801 chrY_DS485764v1_random 1056 unlocalized chrY primary NW_001847053.1,DS485764.1,211000022279377 chrY_DS485767v1_random 1056 unlocalized chrY primary NW_001847056.1,DS485767.1,211000022279211 chrY_DS485772v1_random 1054 unlocalized chrY primary NW_001847061.1,DS485772.1,211000022279314 chrY_DS485776v1_random 1053 unlocalized chrY primary NW_001847065.1,DS485776.1,211000022279677 chrY_DS485786v1_random 1051 unlocalized chrY primary NW_001847075.1,DS485786.1,211000022280040 chrY_DS485795v1_random 1049 unlocalized chrY primary NW_001847084.1,DS485795.1,211000022278682 chrY_DS485839v1_random 1042 unlocalized chrY primary NW_001847128.1,DS485839.1,211000022279492 chrY_DS485840v1_random 1041 unlocalized chrY primary NW_001847129.1,DS485840.1,211000022278956 chrY_DS485849v1_random 1039 unlocalized chrY primary NW_001847138.1,DS485849.1,211000022280072 chrY_DS485858v1_random 1037 unlocalized chrY primary NW_001847147.1,DS485858.1,211000022279908 chrY_DS485865v1_random 1035 unlocalized chrY primary NW_001847154.1,DS485865.1,211000022278538 chrY_DS485873v1_random 1033 unlocalized chrY primary NW_001847162.1,DS485873.1,211000022278772 chrY_DS485875v1_random 1032 unlocalized chrY primary NW_001847164.1,DS485875.1,211000022278965 chrY_DS485885v1_random 1030 unlocalized chrY primary NW_001847174.1,DS485885.1,211000022280057 chrY_DS485888v1_random 1029 unlocalized chrY primary NW_001847177.1,DS485888.1,211000022279791 chrY_DS485892v1_random 1029 unlocalized chrY primary NW_001847181.1,DS485892.1,211000022279802 chrY_DS485894v1_random 1029 unlocalized chrY primary NW_001847183.1,DS485894.1,211000022278939 chrY_DS485901v1_random 1027 unlocalized chrY primary NW_001847190.1,DS485901.1,211000022279272 chrY_DS485927v1_random 1020 unlocalized chrY primary NW_001847216.1,DS485927.1,211000022278710 chrY_DS485938v1_random 1019 unlocalized chrY primary NW_001847227.1,DS485938.1,211000022279264 chrY_DS485956v1_random 1014 unlocalized chrY primary NW_001847245.1,DS485956.1,211000022279972 chrY_DS485960v1_random 1012 unlocalized chrY primary NW_001847249.1,DS485960.1,211000022279589 chrY_DS485963v1_random 1012 unlocalized chrY primary NW_001847252.1,DS485963.1,211000022279670 chrY_DS485972v1_random 1010 unlocalized chrY primary NW_001847261.1,DS485972.1,211000022279646 chrY_DS485974v1_random 1010 unlocalized chrY primary NW_001847263.1,DS485974.1,211000022279639 chrY_DS485975v1_random 1010 unlocalized chrY primary NW_001847264.1,DS485975.1,211000022279235 chrY_DS486003v1_random 1001 unlocalized chrY primary NW_001847292.1,DS486003.1,211000022278495 chrUn_CP007071v1 19956 unplaced primary NW_007931073.1,CP007071.1,2Cen_mapped_Scaffold_10 chrUn_CP007072v1 44411 unplaced primary NW_007931074.1,CP007072.1,2Cen_mapped_Scaffold_43 chrUn_CP007073v1 13157 unplaced primary NW_007931075.1,CP007073.1,2R2_mapped_Scaffold_56 chrUn_CP007074v1 76224 unplaced primary NW_007931076.1,CP007074.1,3Cen_mapped_Scaffold_1 chrUn_CP007075v1 11983 unplaced primary NW_007931077.1,CP007075.1,3Cen_mapped_Scaffold_27 chrUn_CP007076v1 87365 unplaced primary NW_007931078.1,CP007076.1,3Cen_mapped_Scaffold_31 chrUn_CP007077v1 36913 unplaced primary NW_007931079.1,CP007077.1,3Cen_mapped_Scaffold_36 chrUn_CP007078v1 22604 unplaced primary NW_007931080.1,CP007078.1,3Cen_mapped_Scaffold_41 chrUn_CP007079v1 23238 unplaced primary NW_007931081.1,CP007079.1,3Cen_mapped_Scaffold_50 chrUn_CP007080v1 86267 unplaced primary NW_007931082.1,CP007080.1,Unmapped_Scaffold_4 chrUn_CP007081v1 88768 unplaced primary NW_007931083.1,CP007081.1,Unmapped_Scaffold_8 chrUn_CP007082v1 36482 unplaced primary NW_007931084.1,CP007082.1,Unmapped_Scaffold_11 chrUn_CP007083v1 25537 unplaced primary NW_007931085.1,CP007083.1,Unmapped_Scaffold_13 chrUn_CP007084v1 62570 unplaced primary NW_007931086.1,CP007084.1,Unmapped_Scaffold_17 chrUn_CP007085v1 45120 unplaced primary NW_007931087.1,CP007085.1,Unmapped_Scaffold_22 chrUn_CP007086v1 22882 unplaced primary NW_007931088.1,CP007086.1,Unmapped_Scaffold_24 chrUn_CP007087v1 46986 unplaced primary NW_007931089.1,CP007087.1,Unmapped_Scaffold_28 chrUn_CP007088v1 37106 unplaced primary NW_007931090.1,CP007088.1,Unmapped_Scaffold_29 chrUn_CP007089v1 16157 unplaced primary NW_007931091.1,CP007089.1,Unmapped_Scaffold_32 chrUn_CP007090v1 57785 unplaced primary NW_007931092.1,CP007090.1,Unmapped_Scaffold_35 chrUn_CP007091v1 20763 unplaced primary NW_007931093.1,CP007091.1,Unmapped_Scaffold_37 chrUn_CP007092v1 28305 unplaced primary NW_007931094.1,CP007092.1,Unmapped_Scaffold_38 chrUn_CP007093v1 25698 unplaced primary NW_007931095.1,CP007093.1,Unmapped_Scaffold_44 chrUn_CP007094v1 29583 unplaced primary NW_007931096.1,CP007094.1,Unmapped_Scaffold_45 chrUn_CP007095v1 25560 unplaced primary NW_007931097.1,CP007095.1,Unmapped_Scaffold_46 chrUn_CP007096v1 26115 unplaced primary NW_007931098.1,CP007096.1,Unmapped_Scaffold_48 chrUn_CP007097v1 13455 unplaced primary NW_007931099.1,CP007097.1,Unmapped_Scaffold_51 chrUn_CP007098v1 43383 unplaced primary NW_007931100.1,CP007098.1,Unmapped_Scaffold_52 chrUn_CP007099v1 12632 unplaced primary NW_007931101.1,CP007099.1,Unmapped_Scaffold_54 chrUn_CP007100v1 10091 unplaced primary NW_007931102.1,CP007100.1,Unmapped_Scaffold_58 chrUn_CP007101v1 24503 unplaced primary NW_007931103.1,CP007101.1,Unmapped_Scaffold_60 chrUn_CP007102v1 12714 unplaced primary NW_007931104.1,CP007102.1,211000022278279 chrUn_CP007105v1 47411 unplaced primary NW_007931107.1,CP007105.1,XY_mapped_Scaffold_42 chrUn_CP007120v1 76973 unplaced primary NW_007931121.1,CP007120.1,rDNA chrUn_DS483562v1 50625 unplaced primary NW_001844851.1,DS483562.1,XY_mapped_Scaffold_7 chrUn_DS483629v1 15417 unplaced primary NW_001844918.1,DS483629.1,211000022280772 chrUn_DS483641v1 14503 unplaced primary NW_001844930.1,DS483641.1,211000022280659 chrUn_DS483646v1 14098 unplaced primary NW_001844935.1,DS483646.1,211000022280328 chrUn_DS483647v1 14028 unplaced primary NW_001844936.1,DS483647.1,211000022280541 chrUn_DS483649v1 13935 unplaced primary NW_001844938.1,DS483649.1,211000022280259 chrUn_DS483650v1 13906 unplaced primary NW_001844939.1,DS483650.1,211000022278875 chrUn_DS483658v1 13455 unplaced primary NW_001844947.1,DS483658.1,211000022279719 chrUn_DS483659v1 13416 unplaced primary NW_001844948.1,DS483659.1,211000022279579 chrUn_DS483662v1 13317 unplaced primary NW_001844951.1,DS483662.1,211000022279094 chrUn_DS483663v1 13256 unplaced primary NW_001844952.1,DS483663.1,211000022279556 chrUn_DS483670v1 12827 unplaced primary NW_001844959.1,DS483670.1,211000022279754 chrUn_DS483673v1 12654 unplaced primary NW_001844962.1,DS483673.1,211000022279420 chrUn_DS483674v1 12632 unplaced primary NW_001844963.1,DS483674.1,211000022279022 chrUn_DS483675v1 12536 unplaced primary NW_001844964.1,DS483675.1,211000022279503 chrUn_DS483678v1 12424 unplaced primary NW_001844967.1,DS483678.1,211000022278978 chrUn_DS483679v1 12424 unplaced primary NW_001844968.1,DS483679.1,211000022279829 chrUn_DS483680v1 12399 unplaced primary NW_001844969.1,DS483680.1,211000022278916 chrUn_DS483681v1 12368 unplaced primary NW_001844970.1,DS483681.1,211000022279098 chrUn_DS483682v1 12354 unplaced primary NW_001844971.1,DS483682.1,211000022278777 chrUn_DS483686v1 12148 unplaced primary NW_001844975.1,DS483686.1,211000022279594 chrUn_DS483687v1 12142 unplaced primary NW_001844976.1,DS483687.1,211000022279637 chrUn_DS483688v1 12095 unplaced primary NW_001844977.1,DS483688.1,211000022279456 chrUn_DS483689v1 12034 unplaced primary NW_001844978.1,DS483689.1,211000022279893 chrUn_DS483692v1 11985 unplaced primary NW_001844981.1,DS483692.1,211000022278390 chrUn_DS483693v1 11958 unplaced primary NW_001844982.1,DS483693.1,211000022279189 chrUn_DS483694v1 11951 unplaced primary NW_001844983.1,DS483694.1,211000022278399 chrUn_DS483695v1 11743 unplaced primary NW_001844984.1,DS483695.1,211000022278549 chrUn_DS483700v1 11430 unplaced primary NW_001844989.1,DS483700.1,211000022278269 chrUn_DS483701v1 11220 unplaced primary NW_001844990.1,DS483701.1,211000022279423 chrUn_DS483702v1 11148 unplaced primary NW_001844991.1,DS483702.1,211000022280064 chrUn_DS483703v1 11126 unplaced primary NW_001844992.1,DS483703.1,211000022278686 chrUn_DS483705v1 27456 unplaced primary NW_001844994.1,DS483705.1,211000022278049 chrUn_DS483707v1 25840 unplaced primary NW_001844996.1,DS483707.1,211000022278415 chrUn_DS483709v1 18299 unplaced primary NW_001844998.1,DS483709.1,211000022280761 chrUn_DS483711v1 14687 unplaced primary NW_001845000.1,DS483711.1,211000022278217 chrUn_DS483712v1 14199 unplaced primary NW_001845001.1,DS483712.1,211000022278974 chrUn_DS483719v1 12027 unplaced primary NW_001845008.1,DS483719.1,211000022278273 chrUn_DS483723v1 21074 unplaced primary NW_001845012.1,DS483723.1,211000022278354 chrUn_DS483724v1 13501 unplaced primary NW_001845013.1,DS483724.1,211000022280596 chrUn_DS483726v1 14983 unplaced primary NW_001845015.1,DS483726.1,211000022279114 chrUn_DS483728v1 12681 unplaced primary NW_001845017.1,DS483728.1,211000022278185 chrUn_DS483734v1 15522 unplaced primary NW_001845023.1,DS483734.1,211000022279276 chrUn_DS483735v1 15068 unplaced primary NW_001845024.1,DS483735.1,211000022280237 chrUn_DS483736v1 14006 unplaced primary NW_001845025.1,DS483736.1,211000022278653 chrUn_DS483737v1 13553 unplaced primary NW_001845026.1,DS483737.1,211000022279892 chrUn_DS483738v1 12856 unplaced primary NW_001845027.1,DS483738.1,211000022279146 chrUn_DS483739v1 12459 unplaced primary NW_001845028.1,DS483739.1,211000022279345 chrUn_DS483740v1 12002 unplaced primary NW_001845029.1,DS483740.1,211000022279001 chrUn_DS483741v1 11807 unplaced primary NW_001845030.1,DS483741.1,211000022279523 chrUn_DS483743v1 11569 unplaced primary NW_001845032.1,DS483743.1,211000022278849 chrUn_DS483744v1 9865 unplaced primary NW_001845033.1,DS483744.1,211000022280750 chrUn_DS483746v1 9341 unplaced primary NW_001845035.1,DS483746.1,211000022279869 chrUn_DS483748v1 8346 unplaced primary NW_001845037.1,DS483748.1,211000022278215 chrUn_DS483749v1 8007 unplaced primary NW_001845038.1,DS483749.1,211000022279695 chrUn_DS483750v1 7722 unplaced primary NW_001845039.1,DS483750.1,211000022279735 chrUn_DS483751v1 7314 unplaced primary NW_001845040.1,DS483751.1,211000022280490 chrUn_DS483753v1 7123 unplaced primary NW_001845042.1,DS483753.1,211000022280465 chrUn_DS483754v1 7003 unplaced primary NW_001845043.1,DS483754.1,211000022280734 chrUn_DS483755v1 6936 unplaced primary NW_001845044.1,DS483755.1,211000022278032 chrUn_DS483757v1 6900 unplaced primary NW_001845046.1,DS483757.1,211000022280476 chrUn_DS483758v1 6860 unplaced primary NW_001845047.1,DS483758.1,211000022280735 chrUn_DS483759v1 6860 unplaced primary NW_001845048.1,DS483759.1,211000022279018 chrUn_DS483760v1 6825 unplaced primary NW_001845049.1,DS483760.1,211000022280699 chrUn_DS483762v1 6698 unplaced primary NW_001845051.1,DS483762.1,211000022280447 chrUn_DS483763v1 6546 unplaced primary NW_001845052.1,DS483763.1,211000022280640 chrUn_DS483767v1 6396 unplaced primary NW_001845056.1,DS483767.1,211000022279879 chrUn_DS483768v1 6294 unplaced primary NW_001845057.1,DS483768.1,211000022280236 chrUn_DS483769v1 6237 unplaced primary NW_001845058.1,DS483769.1,211000022279539 chrUn_DS483770v1 6193 unplaced primary NW_001845059.1,DS483770.1,211000022280519 chrUn_DS483772v1 6076 unplaced primary NW_001845061.1,DS483772.1,211000022279177 chrUn_DS483773v1 6062 unplaced primary NW_001845062.1,DS483773.1,211000022280046 chrUn_DS483774v1 6041 unplaced primary NW_001845063.1,DS483774.1,211000022280518 chrUn_DS483776v1 6000 unplaced primary NW_001845065.1,DS483776.1,211000022280545 chrUn_DS483780v1 5968 unplaced primary NW_001845069.1,DS483780.1,211000022280437 chrUn_DS483781v1 5952 unplaced primary NW_001845070.1,DS483781.1,211000022280655 chrUn_DS483782v1 5915 unplaced primary NW_001845071.1,DS483782.1,211000022279884 chrUn_DS483783v1 5891 unplaced primary NW_001845072.1,DS483783.1,211000022279147 chrUn_DS483785v1 5772 unplaced primary NW_001845074.1,DS483785.1,211000022280462 chrUn_DS483787v1 5698 unplaced primary NW_001845076.1,DS483787.1,211000022280472 chrUn_DS483792v1 5465 unplaced primary NW_001845081.1,DS483792.1,211000022279380 chrUn_DS483793v1 5463 unplaced primary NW_001845082.1,DS483793.1,211000022280517 chrUn_DS483796v1 5383 unplaced primary NW_001845085.1,DS483796.1,211000022280727 chrUn_DS483797v1 5360 unplaced primary NW_001845086.1,DS483797.1,211000022279257 chrUn_DS483798v1 5324 unplaced primary NW_001845087.1,DS483798.1,211000022280656 chrUn_DS483799v1 5323 unplaced primary NW_001845088.1,DS483799.1,211000022278556 chrUn_DS483800v1 5316 unplaced primary NW_001845089.1,DS483800.1,211000022280637 chrUn_DS483801v1 5281 unplaced primary NW_001845090.1,DS483801.1,211000022279634 chrUn_DS483804v1 5189 unplaced primary NW_001845093.1,DS483804.1,211000022279559 chrUn_DS483805v1 5182 unplaced primary NW_001845094.1,DS483805.1,211000022278960 chrUn_DS483806v1 5098 unplaced primary NW_001845095.1,DS483806.1,211000022280459 chrUn_DS483807v1 5061 unplaced primary NW_001845096.1,DS483807.1,211000022280720 chrUn_DS483808v1 5060 unplaced primary NW_001845097.1,DS483808.1,211000022278712 chrUn_DS483810v1 5026 unplaced primary NW_001845099.1,DS483810.1,211000022280583 chrUn_DS483811v1 5000 unplaced primary NW_001845100.1,DS483811.1,211000022280615 chrUn_DS483812v1 4996 unplaced primary NW_001845101.1,DS483812.1,211000022280461 chrUn_DS483813v1 4994 unplaced primary NW_001845102.1,DS483813.1,211000022280558 chrUn_DS483814v1 4986 unplaced primary NW_001845103.1,DS483814.1,211000022280087 chrUn_DS483815v1 4967 unplaced primary NW_001845104.1,DS483815.1,211000022279928 chrUn_DS483816v1 4939 unplaced primary NW_001845105.1,DS483816.1,211000022279913 chrUn_DS483817v1 4933 unplaced primary NW_001845106.1,DS483817.1,211000022280589 chrUn_DS483819v1 4903 unplaced primary NW_001845108.1,DS483819.1,211000022280445 chrUn_DS483820v1 4888 unplaced primary NW_001845109.1,DS483820.1,211000022279453 chrUn_DS483822v1 4865 unplaced primary NW_001845111.1,DS483822.1,211000022280233 chrUn_DS483824v1 4820 unplaced primary NW_001845113.1,DS483824.1,211000022280015 chrUn_DS483825v1 4815 unplaced primary NW_001845114.1,DS483825.1,211000022279449 chrUn_DS483828v1 4785 unplaced primary NW_001845117.1,DS483828.1,211000022280607 chrUn_DS483832v1 4705 unplaced primary NW_001845121.1,DS483832.1,211000022280618 chrUn_DS483833v1 4701 unplaced primary NW_001845122.1,DS483833.1,211000022280503 chrUn_DS483837v1 4608 unplaced primary NW_001845126.1,DS483837.1,211000022280050 chrUn_DS483839v1 4581 unplaced primary NW_001845128.1,DS483839.1,211000022280652 chrUn_DS483840v1 4573 unplaced primary NW_001845129.1,DS483840.1,211000022279344 chrUn_DS483841v1 4553 unplaced primary NW_001845130.1,DS483841.1,211000022279701 chrUn_DS483844v1 4471 unplaced primary NW_001845133.1,DS483844.1,211000022280457 chrUn_DS483845v1 4465 unplaced primary NW_001845134.1,DS483845.1,211000022278926 chrUn_DS483846v1 4452 unplaced primary NW_001845135.1,DS483846.1,211000022280743 chrUn_DS483848v1 4436 unplaced primary NW_001845137.1,DS483848.1,211000022279389 chrUn_DS483849v1 4400 unplaced primary NW_001845138.1,DS483849.1,211000022278765 chrUn_DS483853v1 4381 unplaced primary NW_001845142.1,DS483853.1,211000022279463 chrUn_DS483854v1 4378 unplaced primary NW_001845143.1,DS483854.1,211000022280128 chrUn_DS483855v1 4377 unplaced primary NW_001845144.1,DS483855.1,211000022279091 chrUn_DS483856v1 4370 unplaced primary NW_001845145.1,DS483856.1,211000022279396 chrUn_DS483858v1 4361 unplaced primary NW_001845147.1,DS483858.1,211000022279940 chrUn_DS483859v1 4336 unplaced primary NW_001845148.1,DS483859.1,211000022280516 chrUn_DS483861v1 4310 unplaced primary NW_001845150.1,DS483861.1,211000022280671 chrUn_DS483862v1 4310 unplaced primary NW_001845151.1,DS483862.1,211000022279887 chrUn_DS483863v1 4305 unplaced primary NW_001845152.1,DS483863.1,211000022280283 chrUn_DS483864v1 4295 unplaced primary NW_001845153.1,DS483864.1,211000022278723 chrUn_DS483865v1 4289 unplaced primary NW_001845154.1,DS483865.1,211000022280473 chrUn_DS483866v1 4273 unplaced primary NW_001845155.1,DS483866.1,211000022280202 chrUn_DS483867v1 4272 unplaced primary NW_001845156.1,DS483867.1,211000022279855 chrUn_DS483868v1 4256 unplaced primary NW_001845157.1,DS483868.1,211000022280068 chrUn_DS483870v1 4231 unplaced primary NW_001845159.1,DS483870.1,211000022280002 chrUn_DS483871v1 4225 unplaced primary NW_001845160.1,DS483871.1,211000022278966 chrUn_DS483872v1 4222 unplaced primary NW_001845161.1,DS483872.1,211000022279667 chrUn_DS483873v1 4222 unplaced primary NW_001845162.1,DS483873.1,211000022278089 chrUn_DS483874v1 4202 unplaced primary NW_001845163.1,DS483874.1,211000022280762 chrUn_DS483876v1 4188 unplaced primary NW_001845165.1,DS483876.1,211000022279052 chrUn_DS483877v1 4183 unplaced primary NW_001845166.1,DS483877.1,211000022278351 chrUn_DS483878v1 4182 unplaced primary NW_001845167.1,DS483878.1,211000022280508 chrUn_DS483879v1 4163 unplaced primary NW_001845168.1,DS483879.1,211000022278372 chrUn_DS483880v1 4150 unplaced primary NW_001845169.1,DS483880.1,211000022280653 chrUn_DS483881v1 4135 unplaced primary NW_001845170.1,DS483881.1,211000022280560 chrUn_DS483886v1 4081 unplaced primary NW_001845175.1,DS483886.1,211000022280098 chrUn_DS483891v1 4030 unplaced primary NW_001845180.1,DS483891.1,211000022280110 chrUn_DS483895v1 4006 unplaced primary NW_001845184.1,DS483895.1,211000022280448 chrUn_DS483896v1 3991 unplaced primary NW_001845185.1,DS483896.1,211000022280623 chrUn_DS483898v1 3970 unplaced primary NW_001845187.1,DS483898.1,211000022280446 chrUn_DS483899v1 3964 unplaced primary NW_001845188.1,DS483899.1,211000022280305 chrUn_DS483900v1 3960 unplaced primary NW_001845189.1,DS483900.1,211000022280684 chrUn_DS483901v1 3950 unplaced primary NW_001845190.1,DS483901.1,211000022278675 chrUn_DS483904v1 3932 unplaced primary NW_001845193.1,DS483904.1,211000022280032 chrUn_DS483906v1 3924 unplaced primary NW_001845195.1,DS483906.1,211000022278100 chrUn_DS483908v1 3913 unplaced primary NW_001845197.1,DS483908.1,211000022279372 chrUn_DS483910v1 3906 unplaced primary NW_001845199.1,DS483910.1,211000022280703 chrUn_DS483913v1 3871 unplaced primary NW_001845202.1,DS483913.1,211000022279750 chrUn_DS483914v1 3864 unplaced primary NW_001845203.1,DS483914.1,211000022278945 chrUn_DS483915v1 3858 unplaced primary NW_001845204.1,DS483915.1,211000022279675 chrUn_DS483918v1 3818 unplaced primary NW_001845207.1,DS483918.1,211000022280498 chrUn_DS483919v1 3807 unplaced primary NW_001845208.1,DS483919.1,211000022279243 chrUn_DS483920v1 3806 unplaced primary NW_001845209.1,DS483920.1,211000022279743 chrUn_DS483921v1 3806 unplaced primary NW_001845210.1,DS483921.1,211000022278195 chrUn_DS483925v1 3755 unplaced primary NW_001845214.1,DS483925.1,211000022280471 chrUn_DS483927v1 3737 unplaced primary NW_001845216.1,DS483927.1,211000022280551 chrUn_DS483929v1 3717 unplaced primary NW_001845218.1,DS483929.1,211000022280455 chrUn_DS483930v1 3716 unplaced primary NW_001845219.1,DS483930.1,211000022279477 chrUn_DS483933v1 3708 unplaced primary NW_001845222.1,DS483933.1,211000022278697 chrUn_DS483936v1 3681 unplaced primary NW_001845225.1,DS483936.1,211000022278602 chrUn_DS483937v1 3660 unplaced primary NW_001845226.1,DS483937.1,211000022280606 chrUn_DS483938v1 3650 unplaced primary NW_001845227.1,DS483938.1,211000022278392 chrUn_DS483939v1 3649 unplaced primary NW_001845228.1,DS483939.1,211000022279844 chrUn_DS483940v1 3648 unplaced primary NW_001845229.1,DS483940.1,211000022278611 chrUn_DS483941v1 3646 unplaced primary NW_001845230.1,DS483941.1,211000022280565 chrUn_DS483943v1 3638 unplaced primary NW_001845232.1,DS483943.1,211000022280463 chrUn_DS483944v1 3622 unplaced primary NW_001845233.1,DS483944.1,211000022279370 chrUn_DS483945v1 3622 unplaced primary NW_001845234.1,DS483945.1,211000022280026 chrUn_DS483947v1 3603 unplaced primary NW_001845236.1,DS483947.1,211000022280522 chrUn_DS483949v1 3593 unplaced primary NW_001845238.1,DS483949.1,211000022280562 chrUn_DS483951v1 3574 unplaced primary NW_001845240.1,DS483951.1,211000022280654 chrUn_DS483953v1 3557 unplaced primary NW_001845242.1,DS483953.1,211000022279961 chrUn_DS483954v1 3554 unplaced primary NW_001845243.1,DS483954.1,211000022280525 chrUn_DS483956v1 3553 unplaced primary NW_001845245.1,DS483956.1,211000022280127 chrUn_DS483957v1 3553 unplaced primary NW_001845246.1,DS483957.1,211000022278396 chrUn_DS483960v1 3527 unplaced primary NW_001845249.1,DS483960.1,211000022280692 chrUn_DS483961v1 3527 unplaced primary NW_001845250.1,DS483961.1,211000022279945 chrUn_DS483964v1 3519 unplaced primary NW_001845253.1,DS483964.1,211000022280156 chrUn_DS483965v1 3503 unplaced primary NW_001845254.1,DS483965.1,211000022279613 chrUn_DS483970v1 3490 unplaced primary NW_001845259.1,DS483970.1,211000022279229 chrUn_DS483972v1 3477 unplaced primary NW_001845261.1,DS483972.1,211000022278768 chrUn_DS483975v1 3466 unplaced primary NW_001845264.1,DS483975.1,211000022279812 chrUn_DS483976v1 3463 unplaced primary NW_001845265.1,DS483976.1,211000022278203 chrUn_DS483977v1 3458 unplaced primary NW_001845266.1,DS483977.1,211000022278312 chrUn_DS483979v1 3434 unplaced primary NW_001845268.1,DS483979.1,211000022279431 chrUn_DS483982v1 3402 unplaced primary NW_001845271.1,DS483982.1,211000022280533 chrUn_DS483983v1 3396 unplaced primary NW_001845272.1,DS483983.1,211000022280335 chrUn_DS483985v1 3389 unplaced primary NW_001845274.1,DS483985.1,211000022280566 chrUn_DS483986v1 3386 unplaced primary NW_001845275.1,DS483986.1,211000022280556 chrUn_DS483989v1 3373 unplaced primary NW_001845278.1,DS483989.1,211000022279877 chrUn_DS483992v1 3365 unplaced primary NW_001845281.1,DS483992.1,211000022280554 chrUn_DS483994v1 3348 unplaced primary NW_001845283.1,DS483994.1,211000022280295 chrUn_DS483998v1 3313 unplaced primary NW_001845287.1,DS483998.1,211000022280570 chrUn_DS483999v1 3308 unplaced primary NW_001845288.1,DS483999.1,211000022280595 chrUn_DS484000v1 3302 unplaced primary NW_001845289.1,DS484000.1,211000022280564 chrUn_DS484001v1 3299 unplaced primary NW_001845290.1,DS484001.1,211000022280255 chrUn_DS484003v1 3284 unplaced primary NW_001845292.1,DS484003.1,211000022279606 chrUn_DS484004v1 3277 unplaced primary NW_001845293.1,DS484004.1,211000022280105 chrUn_DS484006v1 3268 unplaced primary NW_001845295.1,DS484006.1,211000022280524 chrUn_DS484007v1 3262 unplaced primary NW_001845296.1,DS484007.1,211000022280440 chrUn_DS484009v1 3259 unplaced primary NW_001845298.1,DS484009.1,211000022280687 chrUn_DS484010v1 3259 unplaced primary NW_001845299.1,DS484010.1,211000022280480 chrUn_DS484013v1 3252 unplaced primary NW_001845302.1,DS484013.1,211000022280296 chrUn_DS484015v1 3234 unplaced primary NW_001845304.1,DS484015.1,211000022280115 chrUn_DS484017v1 3227 unplaced primary NW_001845306.1,DS484017.1,211000022279953 chrUn_DS484018v1 3223 unplaced primary NW_001845307.1,DS484018.1,211000022280588 chrUn_DS484020v1 3218 unplaced primary NW_001845309.1,DS484020.1,211000022279982 chrUn_DS484022v1 3209 unplaced primary NW_001845311.1,DS484022.1,211000022280008 chrUn_DS484025v1 3201 unplaced primary NW_001845314.1,DS484025.1,211000022279394 chrUn_DS484027v1 3197 unplaced primary NW_001845316.1,DS484027.1,211000022279265 chrUn_DS484028v1 3196 unplaced primary NW_001845317.1,DS484028.1,211000022279284 chrUn_DS484031v1 3190 unplaced primary NW_001845320.1,DS484031.1,211000022280557 chrUn_DS484036v1 3174 unplaced primary NW_001845325.1,DS484036.1,211000022280555 chrUn_DS484038v1 3171 unplaced primary NW_001845327.1,DS484038.1,211000022280456 chrUn_DS484039v1 3162 unplaced primary NW_001845328.1,DS484039.1,211000022278219 chrUn_DS484040v1 3159 unplaced primary NW_001845329.1,DS484040.1,211000022278438 chrUn_DS484041v1 3157 unplaced primary NW_001845330.1,DS484041.1,211000022279700 chrUn_DS484042v1 3156 unplaced primary NW_001845331.1,DS484042.1,211000022279868 chrUn_DS484044v1 3144 unplaced primary NW_001845333.1,DS484044.1,211000022280211 chrUn_DS484045v1 3129 unplaced primary NW_001845334.1,DS484045.1,211000022280467 chrUn_DS484047v1 3123 unplaced primary NW_001845336.1,DS484047.1,211000022279777 chrUn_DS484048v1 3120 unplaced primary NW_001845337.1,DS484048.1,211000022279169 chrUn_DS484050v1 3100 unplaced primary NW_001845339.1,DS484050.1,211000022278398 chrUn_DS484052v1 3089 unplaced primary NW_001845341.1,DS484052.1,211000022278280 chrUn_DS484053v1 3085 unplaced primary NW_001845342.1,DS484053.1,211000022280511 chrUn_DS484054v1 3080 unplaced primary NW_001845343.1,DS484054.1,211000022278785 chrUn_DS484055v1 3080 unplaced primary NW_001845344.1,DS484055.1,211000022280114 chrUn_DS484058v1 3073 unplaced primary NW_001845347.1,DS484058.1,211000022278164 chrUn_DS484059v1 3073 unplaced primary NW_001845348.1,DS484059.1,211000022279179 chrUn_DS484062v1 3058 unplaced primary NW_001845351.1,DS484062.1,211000022279784 chrUn_DS484064v1 3044 unplaced primary NW_001845353.1,DS484064.1,211000022280080 chrUn_DS484065v1 3043 unplaced primary NW_001845354.1,DS484065.1,211000022280261 chrUn_DS484066v1 3025 unplaced primary NW_001845355.1,DS484066.1,211000022280212 chrUn_DS484068v1 3013 unplaced primary NW_001845357.1,DS484068.1,211000022280577 chrUn_DS484069v1 3010 unplaced primary NW_001845358.1,DS484069.1,211000022278581 chrUn_DS484070v1 3009 unplaced primary NW_001845359.1,DS484070.1,211000022280093 chrUn_DS484073v1 2999 unplaced primary NW_001845362.1,DS484073.1,211000022278395 chrUn_DS484076v1 2991 unplaced primary NW_001845365.1,DS484076.1,211000022278744 chrUn_DS484077v1 2984 unplaced primary NW_001845366.1,DS484077.1,211000022278883 chrUn_DS484078v1 2982 unplaced primary NW_001845367.1,DS484078.1,211000022280086 chrUn_DS484079v1 2982 unplaced primary NW_001845368.1,DS484079.1,211000022280260 chrUn_DS484080v1 2971 unplaced primary NW_001845369.1,DS484080.1,211000022279837 chrUn_DS484083v1 2957 unplaced primary NW_001845372.1,DS484083.1,211000022279761 chrUn_DS484086v1 2943 unplaced primary NW_001845375.1,DS484086.1,211000022280035 chrUn_DS484087v1 2937 unplaced primary NW_001845376.1,DS484087.1,211000022279239 chrUn_DS484089v1 2928 unplaced primary NW_001845378.1,DS484089.1,211000022280037 chrUn_DS484090v1 2927 unplaced primary NW_001845379.1,DS484090.1,211000022280474 chrUn_DS484091v1 2926 unplaced primary NW_001845380.1,DS484091.1,211000022280316 chrUn_DS484092v1 2924 unplaced primary NW_001845381.1,DS484092.1,211000022280536 chrUn_DS484093v1 2922 unplaced primary NW_001845382.1,DS484093.1,211000022279442 chrUn_DS484095v1 2919 unplaced primary NW_001845384.1,DS484095.1,211000022280544 chrUn_DS484096v1 2916 unplaced primary NW_001845385.1,DS484096.1,211000022278554 chrUn_DS484097v1 2914 unplaced primary NW_001845386.1,DS484097.1,211000022280251 chrUn_DS484098v1 2911 unplaced primary NW_001845387.1,DS484098.1,211000022279488 chrUn_DS484100v1 2905 unplaced primary NW_001845389.1,DS484100.1,211000022278378 chrUn_DS484102v1 2903 unplaced primary NW_001845391.1,DS484102.1,211000022278952 chrUn_DS484104v1 2893 unplaced primary NW_001845393.1,DS484104.1,211000022280272 chrUn_DS484105v1 2889 unplaced primary NW_001845394.1,DS484105.1,211000022280010 chrUn_DS484106v1 2884 unplaced primary NW_001845395.1,DS484106.1,211000022279061 chrUn_DS484107v1 2882 unplaced primary NW_001845396.1,DS484107.1,211000022280205 chrUn_DS484108v1 2882 unplaced primary NW_001845397.1,DS484108.1,211000022280311 chrUn_DS484109v1 2882 unplaced primary NW_001845398.1,DS484109.1,211000022280012 chrUn_DS484111v1 2881 unplaced primary NW_001845400.1,DS484111.1,211000022279021 chrUn_DS484113v1 2876 unplaced primary NW_001845402.1,DS484113.1,211000022280610 chrUn_DS484116v1 2860 unplaced primary NW_001845405.1,DS484116.1,211000022280227 chrUn_DS484117v1 2860 unplaced primary NW_001845406.1,DS484117.1,211000022279867 chrUn_DS484118v1 2858 unplaced primary NW_001845407.1,DS484118.1,211000022279288 chrUn_DS484120v1 2855 unplaced primary NW_001845409.1,DS484120.1,211000022280333 chrUn_DS484122v1 2849 unplaced primary NW_001845411.1,DS484122.1,211000022278404 chrUn_DS484123v1 2848 unplaced primary NW_001845412.1,DS484123.1,211000022280436 chrUn_DS484134v1 2828 unplaced primary NW_001845423.1,DS484134.1,211000022280501 chrUn_DS484138v1 2822 unplaced primary NW_001845427.1,DS484138.1,211000022279964 chrUn_DS484139v1 2820 unplaced primary NW_001845428.1,DS484139.1,211000022278098 chrUn_DS484144v1 2811 unplaced primary NW_001845433.1,DS484144.1,211000022280469 chrUn_DS484145v1 2804 unplaced primary NW_001845434.1,DS484145.1,211000022280340 chrUn_DS484147v1 2796 unplaced primary NW_001845436.1,DS484147.1,211000022279948 chrUn_DS484148v1 2795 unplaced primary NW_001845437.1,DS484148.1,211000022279521 chrUn_DS484149v1 2795 unplaced primary NW_001845438.1,DS484149.1,211000022279416 chrUn_DS484151v1 2794 unplaced primary NW_001845440.1,DS484151.1,211000022280214 chrUn_DS484152v1 2793 unplaced primary NW_001845441.1,DS484152.1,211000022278975 chrUn_DS484153v1 2793 unplaced primary NW_001845442.1,DS484153.1,211000022279746 chrUn_DS484154v1 2791 unplaced primary NW_001845443.1,DS484154.1,211000022278923 chrUn_DS484155v1 2790 unplaced primary NW_001845444.1,DS484155.1,211000022279311 chrUn_DS484156v1 2788 unplaced primary NW_001845445.1,DS484156.1,211000022279623 chrUn_DS484157v1 2787 unplaced primary NW_001845446.1,DS484157.1,211000022279527 chrUn_DS484159v1 2784 unplaced primary NW_001845448.1,DS484159.1,211000022280171 chrUn_DS484160v1 2783 unplaced primary NW_001845449.1,DS484160.1,211000022278794 chrUn_DS484167v1 2745 unplaced primary NW_001845456.1,DS484167.1,211000022280497 chrUn_DS484168v1 2744 unplaced primary NW_001845457.1,DS484168.1,211000022278440 chrUn_DS484169v1 2736 unplaced primary NW_001845458.1,DS484169.1,211000022279562 chrUn_DS484170v1 2733 unplaced primary NW_001845459.1,DS484170.1,211000022278790 chrUn_DS484176v1 2708 unplaced primary NW_001845465.1,DS484176.1,211000022280707 chrUn_DS484177v1 2703 unplaced primary NW_001845466.1,DS484177.1,211000022279911 chrUn_DS484180v1 2697 unplaced primary NW_001845469.1,DS484180.1,211000022278421 chrUn_DS484183v1 2688 unplaced primary NW_001845472.1,DS484183.1,211000022279653 chrUn_DS484188v1 2670 unplaced primary NW_001845477.1,DS484188.1,211000022279157 chrUn_DS484189v1 2669 unplaced primary NW_001845478.1,DS484189.1,211000022279973 chrUn_DS484190v1 2668 unplaced primary NW_001845479.1,DS484190.1,211000022278546 chrUn_DS484191v1 2665 unplaced primary NW_001845480.1,DS484191.1,211000022278114 chrUn_DS484192v1 2664 unplaced primary NW_001845481.1,DS484192.1,211000022280108 chrUn_DS484193v1 2647 unplaced primary NW_001845482.1,DS484193.1,211000022279233 chrUn_DS484196v1 2644 unplaced primary NW_001845485.1,DS484196.1,211000022280284 chrUn_DS484202v1 2636 unplaced primary NW_001845491.1,DS484202.1,211000022278426 chrUn_DS484205v1 2629 unplaced primary NW_001845494.1,DS484205.1,211000022279602 chrUn_DS484206v1 2628 unplaced primary NW_001845495.1,DS484206.1,211000022280089 chrUn_DS484207v1 2626 unplaced primary NW_001845496.1,DS484207.1,211000022278937 chrUn_DS484209v1 2618 unplaced primary NW_001845498.1,DS484209.1,211000022280548 chrUn_DS484210v1 2617 unplaced primary NW_001845499.1,DS484210.1,211000022278732 chrUn_DS484212v1 2612 unplaced primary NW_001845501.1,DS484212.1,211000022280198 chrUn_DS484213v1 2611 unplaced primary NW_001845502.1,DS484213.1,211000022280137 chrUn_DS484217v1 2603 unplaced primary NW_001845506.1,DS484217.1,211000022280112 chrUn_DS484220v1 2588 unplaced primary NW_001845509.1,DS484220.1,211000022279003 chrUn_DS484221v1 2584 unplaced primary NW_001845510.1,DS484221.1,211000022280141 chrUn_DS484222v1 2583 unplaced primary NW_001845511.1,DS484222.1,211000022280535 chrUn_DS484224v1 2577 unplaced primary NW_001845513.1,DS484224.1,211000022280696 chrUn_DS484225v1 2577 unplaced primary NW_001845514.1,DS484225.1,211000022280520 chrUn_DS484226v1 2576 unplaced primary NW_001845515.1,DS484226.1,211000022278327 chrUn_DS484228v1 2575 unplaced primary NW_001845517.1,DS484228.1,211000022279190 chrUn_DS484229v1 2575 unplaced primary NW_001845518.1,DS484229.1,211000022278452 chrUn_DS484230v1 2575 unplaced primary NW_001845519.1,DS484230.1,211000022280443 chrUn_DS484231v1 2574 unplaced primary NW_001845520.1,DS484231.1,211000022279483 chrUn_DS484232v1 2570 unplaced primary NW_001845521.1,DS484232.1,211000022278738 chrUn_DS484234v1 2561 unplaced primary NW_001845523.1,DS484234.1,211000022280553 chrUn_DS484236v1 2556 unplaced primary NW_001845525.1,DS484236.1,211000022279513 chrUn_DS484238v1 2555 unplaced primary NW_001845527.1,DS484238.1,211000022279214 chrUn_DS484239v1 2549 unplaced primary NW_001845528.1,DS484239.1,211000022279191 chrUn_DS484241v1 2547 unplaced primary NW_001845530.1,DS484241.1,211000022279056 chrUn_DS484242v1 2541 unplaced primary NW_001845531.1,DS484242.1,211000022280218 chrUn_DS484243v1 2541 unplaced primary NW_001845532.1,DS484243.1,211000022278963 chrUn_DS484244v1 2536 unplaced primary NW_001845533.1,DS484244.1,211000022279373 chrUn_DS484246v1 2529 unplaced primary NW_001845535.1,DS484246.1,211000022279116 chrUn_DS484247v1 2529 unplaced primary NW_001845536.1,DS484247.1,211000022280485 chrUn_DS484251v1 2521 unplaced primary NW_001845540.1,DS484251.1,211000022278927 chrUn_DS484253v1 2520 unplaced primary NW_001845542.1,DS484253.1,211000022279573 chrUn_DS484254v1 2517 unplaced primary NW_001845543.1,DS484254.1,211000022279710 chrUn_DS484255v1 2516 unplaced primary NW_001845544.1,DS484255.1,211000022279898 chrUn_DS484256v1 2511 unplaced primary NW_001845545.1,DS484256.1,211000022280598 chrUn_DS484257v1 2511 unplaced primary NW_001845546.1,DS484257.1,211000022278282 chrUn_DS484258v1 2510 unplaced primary NW_001845547.1,DS484258.1,211000022279849 chrUn_DS484262v1 2491 unplaced primary NW_001845551.1,DS484262.1,211000022278740 chrUn_DS484263v1 2487 unplaced primary NW_001845552.1,DS484263.1,211000022279126 chrUn_DS484264v1 2479 unplaced primary NW_001845553.1,DS484264.1,211000022280033 chrUn_DS484267v1 2476 unplaced primary NW_001845556.1,DS484267.1,211000022279980 chrUn_DS484271v1 2470 unplaced primary NW_001845560.1,DS484271.1,211000022279866 chrUn_DS484274v1 2462 unplaced primary NW_001845563.1,DS484274.1,211000022279193 chrUn_DS484275v1 2451 unplaced primary NW_001845564.1,DS484275.1,211000022278664 chrUn_DS484276v1 2447 unplaced primary NW_001845565.1,DS484276.1,211000022279070 chrUn_DS484277v1 2442 unplaced primary NW_001845566.1,DS484277.1,211000022278493 chrUn_DS484279v1 2438 unplaced primary NW_001845568.1,DS484279.1,211000022279711 chrUn_DS484280v1 2438 unplaced primary NW_001845569.1,DS484280.1,211000022280492 chrUn_DS484281v1 2438 unplaced primary NW_001845570.1,DS484281.1,211000022279178 chrUn_DS484282v1 2435 unplaced primary NW_001845571.1,DS484282.1,211000022278858 chrUn_DS484283v1 2434 unplaced primary NW_001845572.1,DS484283.1,211000022279651 chrUn_DS484285v1 2431 unplaced primary NW_001845574.1,DS484285.1,211000022279850 chrUn_DS484286v1 2429 unplaced primary NW_001845575.1,DS484286.1,211000022279909 chrUn_DS484287v1 2428 unplaced primary NW_001845576.1,DS484287.1,211000022279780 chrUn_DS484289v1 2425 unplaced primary NW_001845578.1,DS484289.1,211000022280643 chrUn_DS484291v1 2421 unplaced primary NW_001845580.1,DS484291.1,211000022279436 chrUn_DS484292v1 2421 unplaced primary NW_001845581.1,DS484292.1,211000022280679 chrUn_DS484294v1 2419 unplaced primary NW_001845583.1,DS484294.1,211000022280626 chrUn_DS484296v1 2417 unplaced primary NW_001845585.1,DS484296.1,211000022280561 chrUn_DS484300v1 2400 unplaced primary NW_001845589.1,DS484300.1,211000022279960 chrUn_DS484301v1 2394 unplaced primary NW_001845590.1,DS484301.1,211000022279000 chrUn_DS484303v1 2390 unplaced primary NW_001845592.1,DS484303.1,211000022278507 chrUn_DS484304v1 2390 unplaced primary NW_001845593.1,DS484304.1,211000022278335 chrUn_DS484306v1 2385 unplaced primary NW_001845595.1,DS484306.1,211000022280144 chrUn_DS484307v1 2385 unplaced primary NW_001845596.1,DS484307.1,211000022279635 chrUn_DS484308v1 2385 unplaced primary NW_001845597.1,DS484308.1,211000022280302 chrUn_DS484309v1 2384 unplaced primary NW_001845598.1,DS484309.1,211000022278942 chrUn_DS484310v1 2383 unplaced primary NW_001845599.1,DS484310.1,211000022279122 chrUn_DS484311v1 2383 unplaced primary NW_001845600.1,DS484311.1,211000022278716 chrUn_DS484312v1 2382 unplaced primary NW_001845601.1,DS484312.1,211000022279247 chrUn_DS484313v1 2381 unplaced primary NW_001845602.1,DS484313.1,211000022278869 chrUn_DS484314v1 2381 unplaced primary NW_001845603.1,DS484314.1,211000022279810 chrUn_DS484315v1 2379 unplaced primary NW_001845604.1,DS484315.1,211000022279259 chrUn_DS484317v1 2378 unplaced primary NW_001845606.1,DS484317.1,211000022280747 chrUn_DS484318v1 2375 unplaced primary NW_001845607.1,DS484318.1,211000022280289 chrUn_DS484320v1 2369 unplaced primary NW_001845609.1,DS484320.1,211000022279197 chrUn_DS484321v1 2368 unplaced primary NW_001845610.1,DS484321.1,211000022280208 chrUn_DS484329v1 2354 unplaced primary NW_001845618.1,DS484329.1,211000022278387 chrUn_DS484331v1 2352 unplaced primary NW_001845620.1,DS484331.1,211000022279058 chrUn_DS484333v1 2344 unplaced primary NW_001845622.1,DS484333.1,211000022278934 chrUn_DS484335v1 2342 unplaced primary NW_001845624.1,DS484335.1,211000022280228 chrUn_DS484339v1 2330 unplaced primary NW_001845628.1,DS484339.1,211000022278220 chrUn_DS484340v1 2328 unplaced primary NW_001845629.1,DS484340.1,211000022279612 chrUn_DS484342v1 2326 unplaced primary NW_001845631.1,DS484342.1,211000022279966 chrUn_DS484343v1 2325 unplaced primary NW_001845632.1,DS484343.1,211000022280058 chrUn_DS484348v1 2308 unplaced primary NW_001845637.1,DS484348.1,211000022279787 chrUn_DS484350v1 2304 unplaced primary NW_001845639.1,DS484350.1,211000022278536 chrUn_DS484353v1 2295 unplaced primary NW_001845642.1,DS484353.1,211000022280580 chrUn_DS484355v1 2291 unplaced primary NW_001845644.1,DS484355.1,211000022279011 chrUn_DS484363v1 2270 unplaced primary NW_001845652.1,DS484363.1,211000022280698 chrUn_DS484366v1 2266 unplaced primary NW_001845655.1,DS484366.1,211000022278178 chrUn_DS484369v1 2253 unplaced primary NW_001845658.1,DS484369.1,211000022278860 chrUn_DS484370v1 2248 unplaced primary NW_001845659.1,DS484370.1,211000022279479 chrUn_DS484375v1 2234 unplaced primary NW_001845664.1,DS484375.1,211000022280568 chrUn_DS484378v1 2232 unplaced primary NW_001845667.1,DS484378.1,211000022279949 chrUn_DS484380v1 2227 unplaced primary NW_001845669.1,DS484380.1,211000022278953 chrUn_DS484383v1 2221 unplaced primary NW_001845672.1,DS484383.1,211000022278672 chrUn_DS484385v1 2217 unplaced primary NW_001845674.1,DS484385.1,211000022279101 chrUn_DS484386v1 2216 unplaced primary NW_001845675.1,DS484386.1,211000022280621 chrUn_DS484389v1 2207 unplaced primary NW_001845678.1,DS484389.1,211000022279929 chrUn_DS484391v1 2205 unplaced primary NW_001845680.1,DS484391.1,211000022280599 chrUn_DS484394v1 2200 unplaced primary NW_001845683.1,DS484394.1,211000022278888 chrUn_DS484395v1 2198 unplaced primary NW_001845684.1,DS484395.1,211000022280153 chrUn_DS484396v1 2198 unplaced primary NW_001845685.1,DS484396.1,211000022279118 chrUn_DS484400v1 2190 unplaced primary NW_001845689.1,DS484400.1,211000022279039 chrUn_DS484403v1 2187 unplaced primary NW_001845692.1,DS484403.1,211000022279476 chrUn_DS484404v1 2185 unplaced primary NW_001845693.1,DS484404.1,211000022278652 chrUn_DS484407v1 2176 unplaced primary NW_001845696.1,DS484407.1,211000022278205 chrUn_DS484408v1 2173 unplaced primary NW_001845697.1,DS484408.1,211000022280223 chrUn_DS484412v1 2161 unplaced primary NW_001845701.1,DS484412.1,211000022280133 chrUn_DS484414v1 2157 unplaced primary NW_001845703.1,DS484414.1,211000022280500 chrUn_DS484421v1 2129 unplaced primary NW_001845710.1,DS484421.1,211000022280176 chrUn_DS484424v1 2124 unplaced primary NW_001845713.1,DS484424.1,211000022280135 chrUn_DS484425v1 2124 unplaced primary NW_001845714.1,DS484425.1,211000022279663 chrUn_DS484426v1 2119 unplaced primary NW_001845715.1,DS484426.1,211000022280631 chrUn_DS484427v1 2117 unplaced primary NW_001845716.1,DS484427.1,211000022279756 chrUn_DS484432v1 2112 unplaced primary NW_001845721.1,DS484432.1,211000022280617 chrUn_DS484434v1 2108 unplaced primary NW_001845723.1,DS484434.1,211000022280070 chrUn_DS484435v1 2105 unplaced primary NW_001845724.1,DS484435.1,211000022279470 chrUn_DS484436v1 2105 unplaced primary NW_001845725.1,DS484436.1,211000022278968 chrUn_DS484437v1 2103 unplaced primary NW_001845726.1,DS484437.1,211000022279310 chrUn_DS484438v1 2102 unplaced primary NW_001845727.1,DS484438.1,211000022279807 chrUn_DS484443v1 2094 unplaced primary NW_001845732.1,DS484443.1,211000022278874 chrUn_DS484445v1 2092 unplaced primary NW_001845734.1,DS484445.1,211000022279044 chrUn_DS484446v1 2090 unplaced primary NW_001845735.1,DS484446.1,211000022278206 chrUn_DS484448v1 2088 unplaced primary NW_001845737.1,DS484448.1,211000022278138 chrUn_DS484449v1 2087 unplaced primary NW_001845738.1,DS484449.1,211000022279804 chrUn_DS484452v1 2086 unplaced primary NW_001845741.1,DS484452.1,211000022278522 chrUn_DS484454v1 2084 unplaced primary NW_001845743.1,DS484454.1,211000022278711 chrUn_DS484456v1 2081 unplaced primary NW_001845745.1,DS484456.1,211000022278919 chrUn_DS484458v1 2079 unplaced primary NW_001845747.1,DS484458.1,211000022279942 chrUn_DS484460v1 2076 unplaced primary NW_001845749.1,DS484460.1,211000022278216 chrUn_DS484463v1 2064 unplaced primary NW_001845752.1,DS484463.1,211000022279641 chrUn_DS484464v1 2063 unplaced primary NW_001845753.1,DS484464.1,211000022280294 chrUn_DS484466v1 2062 unplaced primary NW_001845755.1,DS484466.1,211000022280143 chrUn_DS484467v1 2060 unplaced primary NW_001845756.1,DS484467.1,211000022279517 chrUn_DS484469v1 2060 unplaced primary NW_001845758.1,DS484469.1,211000022279096 chrUn_DS484470v1 2059 unplaced primary NW_001845759.1,DS484470.1,211000022278506 chrUn_DS484471v1 2050 unplaced primary NW_001845760.1,DS484471.1,211000022279733 chrUn_DS484472v1 2046 unplaced primary NW_001845761.1,DS484472.1,211000022279376 chrUn_DS484475v1 2043 unplaced primary NW_001845764.1,DS484475.1,211000022278439 chrUn_DS484478v1 2033 unplaced primary NW_001845767.1,DS484478.1,211000022278780 chrUn_DS484479v1 2033 unplaced primary NW_001845768.1,DS484479.1,211000022278922 chrUn_DS484480v1 2030 unplaced primary NW_001845769.1,DS484480.1,211000022279198 chrUn_DS484481v1 2027 unplaced primary NW_001845770.1,DS484481.1,211000022278707 chrUn_DS484484v1 2020 unplaced primary NW_001845773.1,DS484484.1,211000022278047 chrUn_DS484485v1 2017 unplaced primary NW_001845774.1,DS484485.1,211000022278284 chrUn_DS484486v1 2014 unplaced primary NW_001845775.1,DS484486.1,211000022280151 chrUn_DS484487v1 2010 unplaced primary NW_001845776.1,DS484487.1,211000022279237 chrUn_DS484489v1 2008 unplaced primary NW_001845778.1,DS484489.1,211000022278120 chrUn_DS484490v1 2006 unplaced primary NW_001845779.1,DS484490.1,211000022278254 chrUn_DS484491v1 2006 unplaced primary NW_001845780.1,DS484491.1,211000022280192 chrUn_DS484493v1 2005 unplaced primary NW_001845782.1,DS484493.1,211000022278589 chrUn_DS484496v1 1998 unplaced primary NW_001845785.1,DS484496.1,211000022278362 chrUn_DS484498v1 1998 unplaced primary NW_001845787.1,DS484498.1,211000022279162 chrUn_DS484499v1 1995 unplaced primary NW_001845788.1,DS484499.1,211000022279654 chrUn_DS484501v1 1990 unplaced primary NW_001845790.1,DS484501.1,211000022279130 chrUn_DS484502v1 1990 unplaced primary NW_001845791.1,DS484502.1,211000022279820 chrUn_DS484503v1 1988 unplaced primary NW_001845792.1,DS484503.1,211000022279712 chrUn_DS484505v1 1986 unplaced primary NW_001845794.1,DS484505.1,211000022278515 chrUn_DS484508v1 1976 unplaced primary NW_001845797.1,DS484508.1,211000022278982 chrUn_DS484509v1 1976 unplaced primary NW_001845798.1,DS484509.1,211000022279851 chrUn_DS484510v1 1975 unplaced primary NW_001845799.1,DS484510.1,211000022279282 chrUn_DS484511v1 1974 unplaced primary NW_001845800.1,DS484511.1,211000022278271 chrUn_DS484513v1 1966 unplaced primary NW_001845802.1,DS484513.1,211000022279889 chrUn_DS484514v1 1966 unplaced primary NW_001845803.1,DS484514.1,211000022279217 chrUn_DS484515v1 1966 unplaced primary NW_001845804.1,DS484515.1,211000022278678 chrUn_DS484520v1 1962 unplaced primary NW_001845809.1,DS484520.1,211000022279571 chrUn_DS484521v1 1962 unplaced primary NW_001845810.1,DS484521.1,211000022280269 chrUn_DS484522v1 1962 unplaced primary NW_001845811.1,DS484522.1,211000022278528 chrUn_DS484524v1 1961 unplaced primary NW_001845813.1,DS484524.1,211000022279628 chrUn_DS484525v1 1961 unplaced primary NW_001845814.1,DS484525.1,211000022280195 chrUn_DS484527v1 1956 unplaced primary NW_001845816.1,DS484527.1,211000022278211 chrUn_DS484528v1 1947 unplaced primary NW_001845817.1,DS484528.1,211000022279900 chrUn_DS484532v1 1945 unplaced primary NW_001845821.1,DS484532.1,211000022278446 chrUn_DS484534v1 1943 unplaced primary NW_001845823.1,DS484534.1,211000022280028 chrUn_DS484539v1 1936 unplaced primary NW_001845828.1,DS484539.1,211000022280605 chrUn_DS484542v1 1933 unplaced primary NW_001845831.1,DS484542.1,211000022279228 chrUn_DS484543v1 1931 unplaced primary NW_001845832.1,DS484543.1,211000022280301 chrUn_DS484544v1 1929 unplaced primary NW_001845833.1,DS484544.1,211000022279627 chrUn_DS484546v1 1928 unplaced primary NW_001845835.1,DS484546.1,211000022278304 chrUn_DS484548v1 1926 unplaced primary NW_001845837.1,DS484548.1,211000022278406 chrUn_DS484549v1 1926 unplaced primary NW_001845838.1,DS484549.1,211000022278890 chrUn_DS484550v1 1924 unplaced primary NW_001845839.1,DS484550.1,211000022279366 chrUn_DS484553v1 1917 unplaced primary NW_001845842.1,DS484553.1,211000022279657 chrUn_DS484557v1 1907 unplaced primary NW_001845846.1,DS484557.1,211000022279969 chrUn_DS484559v1 1905 unplaced primary NW_001845848.1,DS484559.1,211000022278929 chrUn_DS484561v1 1903 unplaced primary NW_001845850.1,DS484561.1,211000022279285 chrUn_DS484565v1 1901 unplaced primary NW_001845854.1,DS484565.1,211000022279473 chrUn_DS484566v1 1900 unplaced primary NW_001845855.1,DS484566.1,211000022279158 chrUn_DS484567v1 1900 unplaced primary NW_001845856.1,DS484567.1,211000022278435 chrUn_DS484571v1 1893 unplaced primary NW_001845860.1,DS484571.1,211000022278274 chrUn_DS484573v1 1890 unplaced primary NW_001845862.1,DS484573.1,211000022280293 chrUn_DS484577v1 1882 unplaced primary NW_001845866.1,DS484577.1,211000022279029 chrUn_DS484578v1 1872 unplaced primary NW_001845867.1,DS484578.1,211000022278988 chrUn_DS484579v1 1872 unplaced primary NW_001845868.1,DS484579.1,211000022279199 chrUn_DS484581v1 1870 unplaced primary NW_001845870.1,DS484581.1,211000022280347 chrUn_DS484584v1 1869 unplaced primary NW_001845873.1,DS484584.1,211000022279921 chrUn_DS484588v1 1863 unplaced primary NW_001845877.1,DS484588.1,211000022279538 chrUn_DS484591v1 1854 unplaced primary NW_001845880.1,DS484591.1,211000022279574 chrUn_DS484592v1 1851 unplaced primary NW_001845881.1,DS484592.1,211000022280344 chrUn_DS484593v1 1849 unplaced primary NW_001845882.1,DS484593.1,211000022279139 chrUn_DS484595v1 1843 unplaced primary NW_001845884.1,DS484595.1,211000022279192 chrUn_DS484601v1 1832 unplaced primary NW_001845890.1,DS484601.1,211000022279097 chrUn_DS484602v1 1832 unplaced primary NW_001845891.1,DS484602.1,211000022280220 chrUn_DS484606v1 1826 unplaced primary NW_001845895.1,DS484606.1,211000022279002 chrUn_DS484607v1 1819 unplaced primary NW_001845896.1,DS484607.1,211000022279971 chrUn_DS484614v1 1806 unplaced primary NW_001845903.1,DS484614.1,211000022279745 chrUn_DS484616v1 1802 unplaced primary NW_001845905.1,DS484616.1,211000022280320 chrUn_DS484617v1 1801 unplaced primary NW_001845906.1,DS484617.1,211000022280326 chrUn_DS484619v1 1800 unplaced primary NW_001845908.1,DS484619.1,211000022279633 chrUn_DS484621v1 1797 unplaced primary NW_001845910.1,DS484621.1,211000022280161 chrUn_DS484629v1 1785 unplaced primary NW_001845918.1,DS484629.1,211000022279121 chrUn_DS484630v1 1776 unplaced primary NW_001845919.1,DS484630.1,211000022279858 chrUn_DS484632v1 1775 unplaced primary NW_001845921.1,DS484632.1,211000022279230 chrUn_DS484635v1 1770 unplaced primary NW_001845924.1,DS484635.1,211000022279481 chrUn_DS484639v1 1761 unplaced primary NW_001845928.1,DS484639.1,211000022279208 chrUn_DS484642v1 1754 unplaced primary NW_001845931.1,DS484642.1,211000022279049 chrUn_DS484646v1 1747 unplaced primary NW_001845935.1,DS484646.1,211000022279159 chrUn_DS484649v1 1738 unplaced primary NW_001845938.1,DS484649.1,211000022280298 chrUn_DS484651v1 1734 unplaced primary NW_001845940.1,DS484651.1,211000022279337 chrUn_DS484652v1 1733 unplaced primary NW_001845941.1,DS484652.1,211000022280700 chrUn_DS484653v1 1732 unplaced primary NW_001845942.1,DS484653.1,211000022278388 chrUn_DS484654v1 1728 unplaced primary NW_001845943.1,DS484654.1,211000022278992 chrUn_DS484656v1 1724 unplaced primary NW_001845945.1,DS484656.1,211000022279931 chrUn_DS484658v1 1719 unplaced primary NW_001845947.1,DS484658.1,211000022279450 chrUn_DS484659v1 1719 unplaced primary NW_001845948.1,DS484659.1,211000022278559 chrUn_DS484661v1 1716 unplaced primary NW_001845950.1,DS484661.1,211000022280160 chrUn_DS484662v1 1715 unplaced primary NW_001845951.1,DS484662.1,211000022280247 chrUn_DS484663v1 1714 unplaced primary NW_001845952.1,DS484663.1,211000022278132 chrUn_DS484667v1 1710 unplaced primary NW_001845956.1,DS484667.1,211000022278306 chrUn_DS484671v1 1703 unplaced primary NW_001845960.1,DS484671.1,211000022279896 chrUn_DS484673v1 1696 unplaced primary NW_001845962.1,DS484673.1,211000022279575 chrUn_DS484678v1 1685 unplaced primary NW_001845967.1,DS484678.1,211000022279490 chrUn_DS484685v1 1675 unplaced primary NW_001845974.1,DS484685.1,211000022279970 chrUn_DS484686v1 1667 unplaced primary NW_001845975.1,DS484686.1,211000022279788 chrUn_DS484689v1 1650 unplaced primary NW_001845978.1,DS484689.1,211000022278224 chrUn_DS484692v1 1643 unplaced primary NW_001845981.1,DS484692.1,211000022279934 chrUn_DS484693v1 1641 unplaced primary NW_001845982.1,DS484693.1,211000022280074 chrUn_DS484699v1 1629 unplaced primary NW_001845988.1,DS484699.1,211000022280315 chrUn_DS484700v1 1625 unplaced primary NW_001845989.1,DS484700.1,211000022280226 chrUn_DS484707v1 1614 unplaced primary NW_001845996.1,DS484707.1,211000022278298 chrUn_DS484709v1 1611 unplaced primary NW_001845998.1,DS484709.1,211000022278979 chrUn_DS484710v1 1610 unplaced primary NW_001845999.1,DS484710.1,211000022278754 chrUn_DS484712v1 1610 unplaced primary NW_001846001.1,DS484712.1,211000022279839 chrUn_DS484713v1 1608 unplaced primary NW_001846002.1,DS484713.1,211000022278969 chrUn_DS484714v1 1597 unplaced primary NW_001846003.1,DS484714.1,211000022280297 chrUn_DS484716v1 1594 unplaced primary NW_001846005.1,DS484716.1,211000022278376 chrUn_DS484718v1 1586 unplaced primary NW_001846007.1,DS484718.1,211000022280131 chrUn_DS484720v1 1586 unplaced primary NW_001846009.1,DS484720.1,211000022278525 chrUn_DS484721v1 1581 unplaced primary NW_001846010.1,DS484721.1,211000022279040 chrUn_DS484722v1 1577 unplaced primary NW_001846011.1,DS484722.1,211000022279691 chrUn_DS484726v1 1571 unplaced primary NW_001846015.1,DS484726.1,211000022278176 chrUn_DS484727v1 1567 unplaced primary NW_001846016.1,DS484727.1,211000022278597 chrUn_DS484728v1 1566 unplaced primary NW_001846017.1,DS484728.1,211000022278866 chrUn_DS484729v1 1560 unplaced primary NW_001846018.1,DS484729.1,211000022280292 chrUn_DS484734v1 1555 unplaced primary NW_001846023.1,DS484734.1,211000022280196 chrUn_DS484735v1 1553 unplaced primary NW_001846024.1,DS484735.1,211000022280694 chrUn_DS484736v1 1552 unplaced primary NW_001846025.1,DS484736.1,211000022278334 chrUn_DS484738v1 1550 unplaced primary NW_001846027.1,DS484738.1,211000022278891 chrUn_DS484739v1 1549 unplaced primary NW_001846028.1,DS484739.1,211000022278521 chrUn_DS484742v1 1543 unplaced primary NW_001846031.1,DS484742.1,211000022279842 chrUn_DS484746v1 1540 unplaced primary NW_001846035.1,DS484746.1,211000022278244 chrUn_DS484748v1 1538 unplaced primary NW_001846037.1,DS484748.1,211000022279246 chrUn_DS484750v1 1533 unplaced primary NW_001846039.1,DS484750.1,211000022280159 chrUn_DS484751v1 1533 unplaced primary NW_001846040.1,DS484751.1,211000022278451 chrUn_DS484752v1 1532 unplaced primary NW_001846041.1,DS484752.1,211000022279671 chrUn_DS484754v1 1527 unplaced primary NW_001846043.1,DS484754.1,211000022280325 chrUn_DS484756v1 1525 unplaced primary NW_001846045.1,DS484756.1,211000022278307 chrUn_DS484760v1 1521 unplaced primary NW_001846049.1,DS484760.1,211000022278947 chrUn_DS484762v1 1520 unplaced primary NW_001846051.1,DS484762.1,211000022280221 chrUn_DS484764v1 1518 unplaced primary NW_001846053.1,DS484764.1,211000022278733 chrUn_DS484769v1 1508 unplaced primary NW_001846058.1,DS484769.1,211000022278210 chrUn_DS484770v1 1504 unplaced primary NW_001846059.1,DS484770.1,211000022278182 chrUn_DS484771v1 1504 unplaced primary NW_001846060.1,DS484771.1,211000022278786 chrUn_DS484772v1 1502 unplaced primary NW_001846061.1,DS484772.1,211000022278594 chrUn_DS484773v1 1494 unplaced primary NW_001846062.1,DS484773.1,211000022280102 chrUn_DS484774v1 1492 unplaced primary NW_001846063.1,DS484774.1,211000022279619 chrUn_DS484776v1 1490 unplaced primary NW_001846065.1,DS484776.1,211000022278721 chrUn_DS484779v1 1487 unplaced primary NW_001846068.1,DS484779.1,211000022279540 chrUn_DS484780v1 1487 unplaced primary NW_001846069.1,DS484780.1,211000022280338 chrUn_DS484782v1 1484 unplaced primary NW_001846071.1,DS484782.1,211000022279207 chrUn_DS484787v1 1475 unplaced primary NW_001846076.1,DS484787.1,211000022278456 chrUn_DS484789v1 1473 unplaced primary NW_001846078.1,DS484789.1,211000022280031 chrUn_DS484792v1 1471 unplaced primary NW_001846081.1,DS484792.1,211000022280235 chrUn_DS484796v1 1468 unplaced primary NW_001846085.1,DS484796.1,211000022279152 chrUn_DS484797v1 1467 unplaced primary NW_001846086.1,DS484797.1,211000022279904 chrUn_DS484798v1 1466 unplaced primary NW_001846087.1,DS484798.1,211000022278550 chrUn_DS484799v1 1464 unplaced primary NW_001846088.1,DS484799.1,211000022279696 chrUn_DS484802v1 1462 unplaced primary NW_001846091.1,DS484802.1,211000022279664 chrUn_DS484804v1 1461 unplaced primary NW_001846093.1,DS484804.1,211000022279509 chrUn_DS484806v1 1458 unplaced primary NW_001846095.1,DS484806.1,211000022279204 chrUn_DS484812v1 1451 unplaced primary NW_001846101.1,DS484812.1,211000022279793 chrUn_DS484815v1 1446 unplaced primary NW_001846104.1,DS484815.1,211000022279875 chrUn_DS484816v1 1446 unplaced primary NW_001846105.1,DS484816.1,211000022278286 chrUn_DS484817v1 1445 unplaced primary NW_001846106.1,DS484817.1,211000022279522 chrUn_DS484822v1 1436 unplaced primary NW_001846111.1,DS484822.1,211000022278262 chrUn_DS484825v1 1432 unplaced primary NW_001846114.1,DS484825.1,211000022278568 chrUn_DS484827v1 1432 unplaced primary NW_001846116.1,DS484827.1,211000022278139 chrUn_DS484828v1 1430 unplaced primary NW_001846117.1,DS484828.1,211000022279748 chrUn_DS484831v1 1429 unplaced primary NW_001846120.1,DS484831.1,211000022279600 chrUn_DS484834v1 1424 unplaced primary NW_001846123.1,DS484834.1,211000022279749 chrUn_DS484836v1 1424 unplaced primary NW_001846125.1,DS484836.1,211000022280009 chrUn_DS484838v1 1422 unplaced primary NW_001846127.1,DS484838.1,211000022279507 chrUn_DS484841v1 1416 unplaced primary NW_001846130.1,DS484841.1,211000022278366 chrUn_DS484842v1 1416 unplaced primary NW_001846131.1,DS484842.1,211000022278420 chrUn_DS484843v1 1416 unplaced primary NW_001846132.1,DS484843.1,211000022278558 chrUn_DS484844v1 1415 unplaced primary NW_001846133.1,DS484844.1,211000022278548 chrUn_DS484846v1 1412 unplaced primary NW_001846135.1,DS484846.1,211000022278949 chrUn_DS484847v1 1411 unplaced primary NW_001846136.1,DS484847.1,211000022279464 chrUn_DS484848v1 1410 unplaced primary NW_001846137.1,DS484848.1,211000022280706 chrUn_DS484851v1 1408 unplaced primary NW_001846140.1,DS484851.1,211000022279454 chrUn_DS484852v1 1407 unplaced primary NW_001846141.1,DS484852.1,211000022279529 chrUn_DS484853v1 1406 unplaced primary NW_001846142.1,DS484853.1,211000022280336 chrUn_DS484855v1 1404 unplaced primary NW_001846144.1,DS484855.1,211000022278167 chrUn_DS484861v1 1395 unplaced primary NW_001846150.1,DS484861.1,211000022278038 chrUn_DS484862v1 1394 unplaced primary NW_001846151.1,DS484862.1,211000022280322 chrUn_DS484865v1 1391 unplaced primary NW_001846154.1,DS484865.1,211000022280644 chrUn_DS484866v1 1391 unplaced primary NW_001846155.1,DS484866.1,211000022278593 chrUn_DS484869v1 1391 unplaced primary NW_001846158.1,DS484869.1,211000022279694 chrUn_DS484870v1 1386 unplaced primary NW_001846159.1,DS484870.1,211000022280346 chrUn_DS484872v1 1385 unplaced primary NW_001846161.1,DS484872.1,211000022280676 chrUn_DS484874v1 1384 unplaced primary NW_001846163.1,DS484874.1,211000022279737 chrUn_DS484878v1 1381 unplaced primary NW_001846167.1,DS484878.1,211000022279890 chrUn_DS484881v1 1380 unplaced primary NW_001846170.1,DS484881.1,211000022278256 chrUn_DS484882v1 1379 unplaced primary NW_001846171.1,DS484882.1,211000022279593 chrUn_DS484884v1 1378 unplaced primary NW_001846173.1,DS484884.1,211000022278676 chrUn_DS484886v1 1377 unplaced primary NW_001846175.1,DS484886.1,211000022279393 chrUn_DS484887v1 1377 unplaced primary NW_001846176.1,DS484887.1,211000022280181 chrUn_DS484888v1 1377 unplaced primary NW_001846177.1,DS484888.1,211000022280071 chrUn_DS484889v1 1377 unplaced primary NW_001846178.1,DS484889.1,211000022279433 chrUn_DS484894v1 1375 unplaced primary NW_001846183.1,DS484894.1,211000022279371 chrUn_DS484895v1 1374 unplaced primary NW_001846184.1,DS484895.1,211000022279023 chrUn_DS484896v1 1374 unplaced primary NW_001846185.1,DS484896.1,211000022278575 chrUn_DS484897v1 1373 unplaced primary NW_001846186.1,DS484897.1,211000022278689 chrUn_DS484898v1 1371 unplaced primary NW_001846187.1,DS484898.1,211000022280341 chrUn_DS484899v1 1369 unplaced primary NW_001846188.1,DS484899.1,211000022279324 chrUn_DS484901v1 1368 unplaced primary NW_001846190.1,DS484901.1,211000022280030 chrUn_DS484904v1 1366 unplaced primary NW_001846193.1,DS484904.1,211000022278413 chrUn_DS484910v1 1356 unplaced primary NW_001846199.1,DS484910.1,211000022279365 chrUn_DS484916v1 1352 unplaced primary NW_001846205.1,DS484916.1,211000022279100 chrUn_DS484917v1 1351 unplaced primary NW_001846206.1,DS484917.1,211000022280327 chrUn_DS484919v1 1347 unplaced primary NW_001846208.1,DS484919.1,211000022279415 chrUn_DS484920v1 1347 unplaced primary NW_001846209.1,DS484920.1,211000022278757 chrUn_DS484921v1 1346 unplaced primary NW_001846210.1,DS484921.1,211000022278157 chrUn_DS484922v1 1344 unplaced primary NW_001846211.1,DS484922.1,211000022278793 chrUn_DS484923v1 1343 unplaced primary NW_001846212.1,DS484923.1,211000022278127 chrUn_DS484926v1 1340 unplaced primary NW_001846215.1,DS484926.1,211000022280343 chrUn_DS484927v1 1340 unplaced primary NW_001846216.1,DS484927.1,211000022280162 chrUn_DS484929v1 1339 unplaced primary NW_001846218.1,DS484929.1,211000022279421 chrUn_DS484930v1 1339 unplaced primary NW_001846219.1,DS484930.1,211000022280206 chrUn_DS484932v1 1337 unplaced primary NW_001846221.1,DS484932.1,211000022279871 chrUn_DS484933v1 1337 unplaced primary NW_001846222.1,DS484933.1,211000022278212 chrUn_DS484938v1 1334 unplaced primary NW_001846227.1,DS484938.1,211000022278151 chrUn_DS484940v1 1333 unplaced primary NW_001846229.1,DS484940.1,211000022280140 chrUn_DS484941v1 1333 unplaced primary NW_001846230.1,DS484941.1,211000022279274 chrUn_DS484943v1 1332 unplaced primary NW_001846232.1,DS484943.1,211000022279685 chrUn_DS484944v1 1330 unplaced primary NW_001846233.1,DS484944.1,211000022278144 chrUn_DS484948v1 1328 unplaced primary NW_001846237.1,DS484948.1,211000022278865 chrUn_DS484954v1 1323 unplaced primary NW_001846243.1,DS484954.1,211000022279516 chrUn_DS484960v1 1316 unplaced primary NW_001846249.1,DS484960.1,211000022279106 chrUn_DS484962v1 1315 unplaced primary NW_001846251.1,DS484962.1,211000022279343 chrUn_DS484964v1 1315 unplaced primary NW_001846253.1,DS484964.1,211000022278194 chrUn_DS484967v1 1311 unplaced primary NW_001846256.1,DS484967.1,211000022279362 chrUn_DS484972v1 1310 unplaced primary NW_001846261.1,DS484972.1,211000022278204 chrUn_DS484976v1 1308 unplaced primary NW_001846265.1,DS484976.1,211000022278714 chrUn_DS484979v1 1304 unplaced primary NW_001846268.1,DS484979.1,211000022278899 chrUn_DS484982v1 1304 unplaced primary NW_001846271.1,DS484982.1,211000022279143 chrUn_DS484984v1 1304 unplaced primary NW_001846273.1,DS484984.1,211000022279354 chrUn_DS484985v1 1303 unplaced primary NW_001846274.1,DS484985.1,211000022278894 chrUn_DS484987v1 1302 unplaced primary NW_001846276.1,DS484987.1,211000022278915 chrUn_DS484988v1 1301 unplaced primary NW_001846277.1,DS484988.1,211000022278408 chrUn_DS484991v1 1299 unplaced primary NW_001846280.1,DS484991.1,211000022279048 chrUn_DS484993v1 1297 unplaced primary NW_001846282.1,DS484993.1,211000022278574 chrUn_DS484998v1 1294 unplaced primary NW_001846287.1,DS484998.1,211000022279699 chrUn_DS484999v1 1294 unplaced primary NW_001846288.1,DS484999.1,211000022278735 chrUn_DS485000v1 1293 unplaced primary NW_001846289.1,DS485000.1,211000022278962 chrUn_DS485002v1 1291 unplaced primary NW_001846291.1,DS485002.1,211000022280191 chrUn_DS485004v1 1290 unplaced primary NW_001846293.1,DS485004.1,211000022279723 chrUn_DS485005v1 1289 unplaced primary NW_001846294.1,DS485005.1,211000022279087 chrUn_DS485007v1 1287 unplaced primary NW_001846296.1,DS485007.1,211000022279318 chrUn_DS485010v1 1286 unplaced primary NW_001846299.1,DS485010.1,211000022279692 chrUn_DS485011v1 1285 unplaced primary NW_001846300.1,DS485011.1,211000022279580 chrUn_DS485019v1 1280 unplaced primary NW_001846308.1,DS485019.1,211000022278604 chrUn_DS485020v1 1280 unplaced primary NW_001846309.1,DS485020.1,211000022279770 chrUn_DS485022v1 1279 unplaced primary NW_001846311.1,DS485022.1,211000022279926 chrUn_DS485024v1 1278 unplaced primary NW_001846313.1,DS485024.1,211000022278338 chrUn_DS485025v1 1278 unplaced primary NW_001846314.1,DS485025.1,211000022279411 chrUn_DS485026v1 1278 unplaced primary NW_001846315.1,DS485026.1,211000022278980 chrUn_DS485027v1 1277 unplaced primary NW_001846316.1,DS485027.1,211000022279182 chrUn_DS485029v1 1277 unplaced primary NW_001846318.1,DS485029.1,211000022278348 chrUn_DS485030v1 1276 unplaced primary NW_001846319.1,DS485030.1,211000022280152 chrUn_DS485031v1 1275 unplaced primary NW_001846320.1,DS485031.1,211000022279708 chrUn_DS485032v1 1275 unplaced primary NW_001846321.1,DS485032.1,211000022279805 chrUn_DS485035v1 1274 unplaced primary NW_001846324.1,DS485035.1,211000022280262 chrUn_DS485036v1 1274 unplaced primary NW_001846325.1,DS485036.1,211000022279656 chrUn_DS485038v1 1272 unplaced primary NW_001846327.1,DS485038.1,211000022278356 chrUn_DS485041v1 1271 unplaced primary NW_001846330.1,DS485041.1,211000022280174 chrUn_DS485045v1 1271 unplaced primary NW_001846334.1,DS485045.1,211000022279378 chrUn_DS485046v1 1270 unplaced primary NW_001846335.1,DS485046.1,211000022279724 chrUn_DS485047v1 1270 unplaced primary NW_001846336.1,DS485047.1,211000022278580 chrUn_DS485053v1 1266 unplaced primary NW_001846342.1,DS485053.1,211000022279441 chrUn_DS485055v1 1264 unplaced primary NW_001846344.1,DS485055.1,211000022278973 chrUn_DS485056v1 1263 unplaced primary NW_001846345.1,DS485056.1,211000022278773 chrUn_DS485058v1 1263 unplaced primary NW_001846347.1,DS485058.1,211000022278993 chrUn_DS485059v1 1263 unplaced primary NW_001846348.1,DS485059.1,211000022279015 chrUn_DS485062v1 1262 unplaced primary NW_001846351.1,DS485062.1,211000022278932 chrUn_DS485064v1 1262 unplaced primary NW_001846353.1,DS485064.1,211000022278889 chrUn_DS485065v1 1262 unplaced primary NW_001846354.1,DS485065.1,211000022278302 chrUn_DS485066v1 1261 unplaced primary NW_001846355.1,DS485066.1,211000022279856 chrUn_DS485067v1 1261 unplaced primary NW_001846356.1,DS485067.1,211000022280224 chrUn_DS485068v1 1260 unplaced primary NW_001846357.1,DS485068.1,211000022279615 chrUn_DS485071v1 1260 unplaced primary NW_001846360.1,DS485071.1,211000022280091 chrUn_DS485073v1 1259 unplaced primary NW_001846362.1,DS485073.1,211000022278281 chrUn_DS485076v1 1258 unplaced primary NW_001846365.1,DS485076.1,211000022278887 chrUn_DS485079v1 1253 unplaced primary NW_001846368.1,DS485079.1,211000022279172 chrUn_DS485082v1 1251 unplaced primary NW_001846371.1,DS485082.1,211000022278848 chrUn_DS485083v1 1251 unplaced primary NW_001846372.1,DS485083.1,211000022280020 chrUn_DS485085v1 1251 unplaced primary NW_001846374.1,DS485085.1,211000022280045 chrUn_DS485086v1 1250 unplaced primary NW_001846375.1,DS485086.1,211000022278161 chrUn_DS485087v1 1249 unplaced primary NW_001846376.1,DS485087.1,211000022279432 chrUn_DS485088v1 1248 unplaced primary NW_001846377.1,DS485088.1,211000022279990 chrUn_DS485089v1 1247 unplaced primary NW_001846378.1,DS485089.1,211000022278717 chrUn_DS485091v1 1246 unplaced primary NW_001846380.1,DS485091.1,211000022280177 chrUn_DS485092v1 1246 unplaced primary NW_001846381.1,DS485092.1,211000022279218 chrUn_DS485098v1 1242 unplaced primary NW_001846387.1,DS485098.1,211000022280678 chrUn_DS485100v1 1241 unplaced primary NW_001846389.1,DS485100.1,211000022278943 chrUn_DS485102v1 1240 unplaced primary NW_001846391.1,DS485102.1,211000022278808 chrUn_DS485105v1 1240 unplaced primary NW_001846394.1,DS485105.1,211000022280053 chrUn_DS485107v1 1239 unplaced primary NW_001846396.1,DS485107.1,211000022280304 chrUn_DS485117v1 1236 unplaced primary NW_001846406.1,DS485117.1,211000022279124 chrUn_DS485118v1 1235 unplaced primary NW_001846407.1,DS485118.1,211000022279412 chrUn_DS485122v1 1234 unplaced primary NW_001846411.1,DS485122.1,211000022279267 chrUn_DS485123v1 1234 unplaced primary NW_001846412.1,DS485123.1,211000022278369 chrUn_DS485125v1 1234 unplaced primary NW_001846414.1,DS485125.1,211000022279728 chrUn_DS485127v1 1233 unplaced primary NW_001846416.1,DS485127.1,211000022279417 chrUn_DS485130v1 1232 unplaced primary NW_001846419.1,DS485130.1,211000022278136 chrUn_DS485132v1 1231 unplaced primary NW_001846421.1,DS485132.1,211000022278727 chrUn_DS485133v1 1231 unplaced primary NW_001846422.1,DS485133.1,211000022279183 chrUn_DS485134v1 1231 unplaced primary NW_001846423.1,DS485134.1,211000022280210 chrUn_DS485136v1 1231 unplaced primary NW_001846425.1,DS485136.1,211000022279144 chrUn_DS485138v1 1229 unplaced primary NW_001846427.1,DS485138.1,211000022278582 chrUn_DS485140v1 1229 unplaced primary NW_001846429.1,DS485140.1,211000022280179 chrUn_DS485144v1 1227 unplaced primary NW_001846433.1,DS485144.1,211000022280318 chrUn_DS485146v1 1227 unplaced primary NW_001846435.1,DS485146.1,211000022279645 chrUn_DS485148v1 1227 unplaced primary NW_001846437.1,DS485148.1,211000022279156 chrUn_DS485149v1 1226 unplaced primary NW_001846438.1,DS485149.1,211000022279778 chrUn_DS485150v1 1226 unplaced primary NW_001846439.1,DS485150.1,211000022278242 chrUn_DS485151v1 1226 unplaced primary NW_001846440.1,DS485151.1,211000022279979 chrUn_DS485152v1 1225 unplaced primary NW_001846441.1,DS485152.1,211000022280085 chrUn_DS485153v1 1225 unplaced primary NW_001846442.1,DS485153.1,211000022278755 chrUn_DS485154v1 1225 unplaced primary NW_001846443.1,DS485154.1,211000022280126 chrUn_DS485155v1 1225 unplaced primary NW_001846444.1,DS485155.1,211000022280303 chrUn_DS485156v1 1225 unplaced primary NW_001846445.1,DS485156.1,211000022279128 chrUn_DS485157v1 1225 unplaced primary NW_001846446.1,DS485157.1,211000022280139 chrUn_DS485160v1 1224 unplaced primary NW_001846449.1,DS485160.1,211000022279590 chrUn_DS485161v1 1224 unplaced primary NW_001846450.1,DS485161.1,211000022279682 chrUn_DS485162v1 1223 unplaced primary NW_001846451.1,DS485162.1,211000022280308 chrUn_DS485163v1 1223 unplaced primary NW_001846452.1,DS485163.1,211000022278758 chrUn_DS485165v1 1222 unplaced primary NW_001846454.1,DS485165.1,211000022278651 chrUn_DS485169v1 1220 unplaced primary NW_001846458.1,DS485169.1,211000022280230 chrUn_DS485173v1 1219 unplaced primary NW_001846462.1,DS485173.1,211000022279017 chrUn_DS485174v1 1219 unplaced primary NW_001846463.1,DS485174.1,211000022279647 chrUn_DS485176v1 1219 unplaced primary NW_001846465.1,DS485176.1,211000022280081 chrUn_DS485177v1 1218 unplaced primary NW_001846466.1,DS485177.1,211000022279872 chrUn_DS485181v1 1214 unplaced primary NW_001846470.1,DS485181.1,211000022278196 chrUn_DS485182v1 1213 unplaced primary NW_001846471.1,DS485182.1,211000022280691 chrUn_DS485184v1 1212 unplaced primary NW_001846473.1,DS485184.1,211000022279554 chrUn_DS485190v1 1211 unplaced primary NW_001846479.1,DS485190.1,211000022279991 chrUn_DS485192v1 1210 unplaced primary NW_001846481.1,DS485192.1,211000022279185 chrUn_DS485194v1 1209 unplaced primary NW_001846483.1,DS485194.1,211000022279648 chrUn_DS485198v1 1209 unplaced primary NW_001846487.1,DS485198.1,211000022280314 chrUn_DS485199v1 1208 unplaced primary NW_001846488.1,DS485199.1,211000022278748 chrUn_DS485200v1 1208 unplaced primary NW_001846489.1,DS485200.1,211000022279729 chrUn_DS485203v1 1208 unplaced primary NW_001846492.1,DS485203.1,211000022279480 chrUn_DS485204v1 1207 unplaced primary NW_001846493.1,DS485204.1,211000022279819 chrUn_DS485205v1 1206 unplaced primary NW_001846494.1,DS485205.1,211000022278409 chrUn_DS485208v1 1205 unplaced primary NW_001846497.1,DS485208.1,211000022279591 chrUn_DS485209v1 1205 unplaced primary NW_001846498.1,DS485209.1,211000022278729 chrUn_DS485211v1 1205 unplaced primary NW_001846500.1,DS485211.1,211000022279853 chrUn_DS485215v1 1203 unplaced primary NW_001846504.1,DS485215.1,211000022279445 chrUn_DS485216v1 1203 unplaced primary NW_001846505.1,DS485216.1,211000022280154 chrUn_DS485218v1 1203 unplaced primary NW_001846507.1,DS485218.1,211000022279425 chrUn_DS485220v1 1202 unplaced primary NW_001846509.1,DS485220.1,211000022279413 chrUn_DS485221v1 1201 unplaced primary NW_001846510.1,DS485221.1,211000022280120 chrUn_DS485223v1 1200 unplaced primary NW_001846512.1,DS485223.1,211000022278430 chrUn_DS485224v1 1200 unplaced primary NW_001846513.1,DS485224.1,211000022279127 chrUn_DS485226v1 1199 unplaced primary NW_001846515.1,DS485226.1,211000022278503 chrUn_DS485227v1 1199 unplaced primary NW_001846516.1,DS485227.1,211000022280121 chrUn_DS485228v1 1198 unplaced primary NW_001846517.1,DS485228.1,211000022279555 chrUn_DS485229v1 1198 unplaced primary NW_001846518.1,DS485229.1,211000022278569 chrUn_DS485230v1 1197 unplaced primary NW_001846519.1,DS485230.1,211000022280345 chrUn_DS485233v1 1197 unplaced primary NW_001846522.1,DS485233.1,211000022279462 chrUn_DS485239v1 1195 unplaced primary NW_001846528.1,DS485239.1,211000022278290 chrUn_DS485240v1 1195 unplaced primary NW_001846529.1,DS485240.1,211000022278547 chrUn_DS485242v1 1194 unplaced primary NW_001846531.1,DS485242.1,211000022278769 chrUn_DS485243v1 1193 unplaced primary NW_001846532.1,DS485243.1,211000022279444 chrUn_DS485245v1 1193 unplaced primary NW_001846534.1,DS485245.1,211000022280076 chrUn_DS485246v1 1193 unplaced primary NW_001846535.1,DS485246.1,211000022278171 chrUn_DS485247v1 1193 unplaced primary NW_001846536.1,DS485247.1,211000022279758 chrUn_DS485249v1 1192 unplaced primary NW_001846538.1,DS485249.1,211000022278951 chrUn_DS485251v1 1192 unplaced primary NW_001846540.1,DS485251.1,211000022279498 chrUn_DS485252v1 1191 unplaced primary NW_001846541.1,DS485252.1,211000022280083 chrUn_DS485253v1 1191 unplaced primary NW_001846542.1,DS485253.1,211000022279789 chrUn_DS485254v1 1190 unplaced primary NW_001846543.1,DS485254.1,211000022278407 chrUn_DS485255v1 1190 unplaced primary NW_001846544.1,DS485255.1,211000022278668 chrUn_DS485256v1 1190 unplaced primary NW_001846545.1,DS485256.1,211000022280319 chrUn_DS485258v1 1189 unplaced primary NW_001846547.1,DS485258.1,211000022279738 chrUn_DS485259v1 1189 unplaced primary NW_001846548.1,DS485259.1,211000022280689 chrUn_DS485260v1 1189 unplaced primary NW_001846549.1,DS485260.1,211000022279095 chrUn_DS485261v1 1189 unplaced primary NW_001846550.1,DS485261.1,211000022278370 chrUn_DS485263v1 1188 unplaced primary NW_001846552.1,DS485263.1,211000022279508 chrUn_DS485264v1 1186 unplaced primary NW_001846553.1,DS485264.1,211000022279406 chrUn_DS485265v1 1186 unplaced primary NW_001846554.1,DS485265.1,211000022279660 chrUn_DS485270v1 1185 unplaced primary NW_001846559.1,DS485270.1,211000022278091 chrUn_DS485273v1 1185 unplaced primary NW_001846562.1,DS485273.1,211000022279358 chrUn_DS485275v1 1185 unplaced primary NW_001846564.1,DS485275.1,211000022279631 chrUn_DS485280v1 1184 unplaced primary NW_001846569.1,DS485280.1,211000022278202 chrUn_DS485284v1 1182 unplaced primary NW_001846573.1,DS485284.1,211000022280194 chrUn_DS485285v1 1181 unplaced primary NW_001846574.1,DS485285.1,211000022278429 chrUn_DS485290v1 1179 unplaced primary NW_001846579.1,DS485290.1,211000022278702 chrUn_DS485291v1 1179 unplaced primary NW_001846580.1,DS485291.1,211000022279375 chrUn_DS485292v1 1179 unplaced primary NW_001846581.1,DS485292.1,211000022279622 chrUn_DS485294v1 1178 unplaced primary NW_001846583.1,DS485294.1,211000022278166 chrUn_DS485296v1 1178 unplaced primary NW_001846585.1,DS485296.1,211000022278265 chrUn_DS485297v1 1178 unplaced primary NW_001846586.1,DS485297.1,211000022280225 chrUn_DS485298v1 1178 unplaced primary NW_001846587.1,DS485298.1,211000022279317 chrUn_DS485301v1 1177 unplaced primary NW_001846590.1,DS485301.1,211000022280183 chrUn_DS485304v1 1175 unplaced primary NW_001846593.1,DS485304.1,211000022278497 chrUn_DS485306v1 1174 unplaced primary NW_001846595.1,DS485306.1,211000022279811 chrUn_DS485309v1 1173 unplaced primary NW_001846598.1,DS485309.1,211000022279360 chrUn_DS485311v1 1173 unplaced primary NW_001846600.1,DS485311.1,211000022278688 chrUn_DS485313v1 1171 unplaced primary NW_001846602.1,DS485313.1,211000022278432 chrUn_DS485314v1 1171 unplaced primary NW_001846603.1,DS485314.1,211000022279956 chrUn_DS485319v1 1169 unplaced primary NW_001846608.1,DS485319.1,211000022279668 chrUn_DS485322v1 1168 unplaced primary NW_001846611.1,DS485322.1,211000022278940 chrUn_DS485323v1 1167 unplaced primary NW_001846612.1,DS485323.1,211000022280257 chrUn_DS485324v1 1167 unplaced primary NW_001846613.1,DS485324.1,211000022278897 chrUn_DS485325v1 1167 unplaced primary NW_001846614.1,DS485325.1,211000022278781 chrUn_DS485326v1 1166 unplaced primary NW_001846615.1,DS485326.1,211000022279549 chrUn_DS485330v1 1166 unplaced primary NW_001846619.1,DS485330.1,211000022280164 chrUn_DS485331v1 1165 unplaced primary NW_001846620.1,DS485331.1,211000022278673 chrUn_DS485333v1 1165 unplaced primary NW_001846622.1,DS485333.1,211000022278423 chrUn_DS485337v1 1163 unplaced primary NW_001846626.1,DS485337.1,211000022278267 chrUn_DS485338v1 1163 unplaced primary NW_001846627.1,DS485338.1,211000022279655 chrUn_DS485339v1 1163 unplaced primary NW_001846628.1,DS485339.1,211000022278296 chrUn_DS485340v1 1163 unplaced primary NW_001846629.1,DS485340.1,211000022278119 chrUn_DS485341v1 1162 unplaced primary NW_001846630.1,DS485341.1,211000022278313 chrUn_DS485342v1 1162 unplaced primary NW_001846631.1,DS485342.1,211000022278520 chrUn_DS485349v1 1161 unplaced primary NW_001846638.1,DS485349.1,211000022278708 chrUn_DS485353v1 1160 unplaced primary NW_001846642.1,DS485353.1,211000022278901 chrUn_DS485354v1 1160 unplaced primary NW_001846643.1,DS485354.1,211000022278184 chrUn_DS485356v1 1160 unplaced primary NW_001846645.1,DS485356.1,211000022278170 chrUn_DS485357v1 1159 unplaced primary NW_001846646.1,DS485357.1,211000022278403 chrUn_DS485361v1 1159 unplaced primary NW_001846650.1,DS485361.1,211000022279135 chrUn_DS485362v1 1158 unplaced primary NW_001846651.1,DS485362.1,211000022278946 chrUn_DS485365v1 1157 unplaced primary NW_001846654.1,DS485365.1,211000022278416 chrUn_DS485368v1 1157 unplaced primary NW_001846657.1,DS485368.1,211000022279069 chrUn_DS485370v1 1156 unplaced primary NW_001846659.1,DS485370.1,211000022279448 chrUn_DS485371v1 1156 unplaced primary NW_001846660.1,DS485371.1,211000022279309 chrUn_DS485376v1 1155 unplaced primary NW_001846665.1,DS485376.1,211000022278283 chrUn_DS485379v1 1154 unplaced primary NW_001846668.1,DS485379.1,211000022279474 chrUn_DS485381v1 1154 unplaced primary NW_001846670.1,DS485381.1,211000022278295 chrUn_DS485382v1 1154 unplaced primary NW_001846671.1,DS485382.1,211000022279726 chrUn_DS485383v1 1154 unplaced primary NW_001846672.1,DS485383.1,211000022279469 chrUn_DS485385v1 1153 unplaced primary NW_001846674.1,DS485385.1,211000022280688 chrUn_DS485386v1 1153 unplaced primary NW_001846675.1,DS485386.1,211000022278174 chrUn_DS485387v1 1152 unplaced primary NW_001846676.1,DS485387.1,211000022278391 chrUn_DS485389v1 1152 unplaced primary NW_001846678.1,DS485389.1,211000022280056 chrUn_DS485390v1 1152 unplaced primary NW_001846679.1,DS485390.1,211000022278134 chrUn_DS485392v1 1151 unplaced primary NW_001846681.1,DS485392.1,211000022279487 chrUn_DS485393v1 1150 unplaced primary NW_001846682.1,DS485393.1,211000022280106 chrUn_DS485395v1 1150 unplaced primary NW_001846684.1,DS485395.1,211000022278870 chrUn_DS485397v1 1148 unplaced primary NW_001846686.1,DS485397.1,211000022279722 chrUn_DS485398v1 1148 unplaced primary NW_001846687.1,DS485398.1,211000022278096 chrUn_DS485400v1 1148 unplaced primary NW_001846689.1,DS485400.1,211000022280124 chrUn_DS485401v1 1148 unplaced primary NW_001846690.1,DS485401.1,211000022279232 chrUn_DS485403v1 1148 unplaced primary NW_001846692.1,DS485403.1,211000022278191 chrUn_DS485407v1 1147 unplaced primary NW_001846696.1,DS485407.1,211000022278401 chrUn_DS485410v1 1147 unplaced primary NW_001846699.1,DS485410.1,211000022280130 chrUn_DS485411v1 1146 unplaced primary NW_001846700.1,DS485411.1,211000022279148 chrUn_DS485415v1 1146 unplaced primary NW_001846704.1,DS485415.1,211000022278663 chrUn_DS485419v1 1144 unplaced primary NW_001846708.1,DS485419.1,211000022280180 chrUn_DS485420v1 1144 unplaced primary NW_001846709.1,DS485420.1,211000022279175 chrUn_DS485421v1 1144 unplaced primary NW_001846710.1,DS485421.1,211000022278263 chrUn_DS485424v1 1143 unplaced primary NW_001846713.1,DS485424.1,211000022280704 chrUn_DS485425v1 1143 unplaced primary NW_001846714.1,DS485425.1,211000022278033 chrUn_DS485426v1 1142 unplaced primary NW_001846715.1,DS485426.1,211000022280018 chrUn_DS485428v1 1142 unplaced primary NW_001846717.1,DS485428.1,211000022279361 chrUn_DS485429v1 1141 unplaced primary NW_001846718.1,DS485429.1,211000022279987 chrUn_DS485433v1 1140 unplaced primary NW_001846722.1,DS485433.1,211000022278143 chrUn_DS485434v1 1140 unplaced primary NW_001846723.1,DS485434.1,211000022279603 chrUn_DS485437v1 1140 unplaced primary NW_001846726.1,DS485437.1,211000022278745 chrUn_DS485438v1 1139 unplaced primary NW_001846727.1,DS485438.1,211000022278807 chrUn_DS485439v1 1139 unplaced primary NW_001846728.1,DS485439.1,211000022279418 chrUn_DS485441v1 1139 unplaced primary NW_001846730.1,DS485441.1,211000022279422 chrUn_DS485442v1 1139 unplaced primary NW_001846731.1,DS485442.1,211000022278928 chrUn_DS485443v1 1138 unplaced primary NW_001846732.1,DS485443.1,211000022278294 chrUn_DS485448v1 1137 unplaced primary NW_001846737.1,DS485448.1,211000022280232 chrUn_DS485451v1 1136 unplaced primary NW_001846740.1,DS485451.1,211000022278333 chrUn_DS485453v1 1136 unplaced primary NW_001846742.1,DS485453.1,211000022279222 chrUn_DS485456v1 1135 unplaced primary NW_001846745.1,DS485456.1,211000022279115 chrUn_DS485457v1 1135 unplaced primary NW_001846746.1,DS485457.1,211000022278221 chrUn_DS485461v1 1134 unplaced primary NW_001846750.1,DS485461.1,211000022279747 chrUn_DS485462v1 1134 unplaced primary NW_001846751.1,DS485462.1,211000022278750 chrUn_DS485464v1 1133 unplaced primary NW_001846753.1,DS485464.1,211000022279744 chrUn_DS485466v1 1133 unplaced primary NW_001846755.1,DS485466.1,211000022278958 chrUn_DS485467v1 1132 unplaced primary NW_001846756.1,DS485467.1,211000022278140 chrUn_DS485468v1 1132 unplaced primary NW_001846757.1,DS485468.1,211000022279125 chrUn_DS485469v1 1132 unplaced primary NW_001846758.1,DS485469.1,211000022279088 chrUn_DS485472v1 1131 unplaced primary NW_001846761.1,DS485472.1,211000022278977 chrUn_DS485475v1 1130 unplaced primary NW_001846764.1,DS485475.1,211000022278445 chrUn_DS485477v1 1130 unplaced primary NW_001846766.1,DS485477.1,211000022278788 chrUn_DS485481v1 1129 unplaced primary NW_001846770.1,DS485481.1,211000022279899 chrUn_DS485482v1 1129 unplaced primary NW_001846771.1,DS485482.1,211000022279684 chrUn_DS485488v1 1127 unplaced primary NW_001846777.1,DS485488.1,211000022278920 chrUn_DS485490v1 1127 unplaced primary NW_001846779.1,DS485490.1,211000022278072 chrUn_DS485491v1 1126 unplaced primary NW_001846780.1,DS485491.1,211000022279564 chrUn_DS485494v1 1126 unplaced primary NW_001846783.1,DS485494.1,211000022279212 chrUn_DS485495v1 1126 unplaced primary NW_001846784.1,DS485495.1,211000022278123 chrUn_DS485496v1 1126 unplaced primary NW_001846785.1,DS485496.1,211000022278412 chrUn_DS485497v1 1125 unplaced primary NW_001846786.1,DS485497.1,211000022279407 chrUn_DS485498v1 1125 unplaced primary NW_001846787.1,DS485498.1,211000022278877 chrUn_DS485500v1 1124 unplaced primary NW_001846789.1,DS485500.1,211000022279652 chrUn_DS485501v1 1124 unplaced primary NW_001846790.1,DS485501.1,211000022278751 chrUn_DS485503v1 1123 unplaced primary NW_001846792.1,DS485503.1,211000022280268 chrUn_DS485504v1 1123 unplaced primary NW_001846793.1,DS485504.1,211000022278145 chrUn_DS485505v1 1123 unplaced primary NW_001846794.1,DS485505.1,211000022278328 chrUn_DS485506v1 1123 unplaced primary NW_001846795.1,DS485506.1,211000022278511 chrUn_DS485509v1 1123 unplaced primary NW_001846798.1,DS485509.1,211000022279055 chrUn_DS485515v1 1120 unplaced primary NW_001846804.1,DS485515.1,211000022278747 chrUn_DS485517v1 1119 unplaced primary NW_001846806.1,DS485517.1,211000022279240 chrUn_DS485518v1 1119 unplaced primary NW_001846807.1,DS485518.1,211000022279221 chrUn_DS485520v1 1118 unplaced primary NW_001846809.1,DS485520.1,211000022279400 chrUn_DS485521v1 1118 unplaced primary NW_001846810.1,DS485521.1,211000022279493 chrUn_DS485522v1 1118 unplaced primary NW_001846811.1,DS485522.1,211000022278514 chrUn_DS485525v1 1117 unplaced primary NW_001846814.1,DS485525.1,211000022279985 chrUn_DS485526v1 1117 unplaced primary NW_001846815.1,DS485526.1,211000022278944 chrUn_DS485527v1 1117 unplaced primary NW_001846816.1,DS485527.1,211000022279632 chrUn_DS485528v1 1117 unplaced primary NW_001846817.1,DS485528.1,211000022279576 chrUn_DS485529v1 1117 unplaced primary NW_001846818.1,DS485529.1,211000022279042 chrUn_DS485530v1 1117 unplaced primary NW_001846819.1,DS485530.1,211000022279769 chrUn_DS485531v1 1116 unplaced primary NW_001846820.1,DS485531.1,211000022279203 chrUn_DS485533v1 1116 unplaced primary NW_001846822.1,DS485533.1,211000022279618 chrUn_DS485535v1 1116 unplaced primary NW_001846824.1,DS485535.1,211000022279845 chrUn_DS485536v1 1116 unplaced primary NW_001846825.1,DS485536.1,211000022280312 chrUn_DS485538v1 1115 unplaced primary NW_001846827.1,DS485538.1,211000022279666 chrUn_DS485539v1 1115 unplaced primary NW_001846828.1,DS485539.1,211000022278257 chrUn_DS485540v1 1114 unplaced primary NW_001846829.1,DS485540.1,211000022279874 chrUn_DS485541v1 1114 unplaced primary NW_001846830.1,DS485541.1,211000022278248 chrUn_DS485542v1 1114 unplaced primary NW_001846831.1,DS485542.1,211000022278533 chrUn_DS485543v1 1114 unplaced primary NW_001846832.1,DS485543.1,211000022279399 chrUn_DS485544v1 1114 unplaced primary NW_001846833.1,DS485544.1,211000022279325 chrUn_DS485545v1 1114 unplaced primary NW_001846834.1,DS485545.1,211000022278886 chrUn_DS485547v1 1112 unplaced primary NW_001846836.1,DS485547.1,211000022278200 chrUn_DS485548v1 1112 unplaced primary NW_001846837.1,DS485548.1,211000022280702 chrUn_DS485557v1 1110 unplaced primary NW_001846846.1,DS485557.1,211000022279102 chrUn_DS485558v1 1110 unplaced primary NW_001846847.1,DS485558.1,211000022278309 chrUn_DS485559v1 1110 unplaced primary NW_001846848.1,DS485559.1,211000022280331 chrUn_DS485563v1 1109 unplaced primary NW_001846852.1,DS485563.1,211000022279014 chrUn_DS485565v1 1109 unplaced primary NW_001846854.1,DS485565.1,211000022280000 chrUn_DS485566v2 544 unplaced primary NW_001846855.2,DS485566.2,211000022279089 chrUn_DS485567v1 1108 unplaced primary NW_001846856.1,DS485567.1,211000022279933 chrUn_DS485569v1 1108 unplaced primary NW_001846858.1,DS485569.1,211000022279414 chrUn_DS485571v1 1107 unplaced primary NW_001846860.1,DS485571.1,211000022279510 chrUn_DS485572v1 1107 unplaced primary NW_001846861.1,DS485572.1,211000022278285 chrUn_DS485574v1 1106 unplaced primary NW_001846863.1,DS485574.1,211000022279923 chrUn_DS485578v1 1105 unplaced primary NW_001846867.1,DS485578.1,211000022278345 chrUn_DS485579v1 1105 unplaced primary NW_001846868.1,DS485579.1,211000022280123 chrUn_DS485581v1 1105 unplaced primary NW_001846870.1,DS485581.1,211000022278603 chrUn_DS485582v1 1105 unplaced primary NW_001846871.1,DS485582.1,211000022279355 chrUn_DS485583v1 1105 unplaced primary NW_001846872.1,DS485583.1,211000022279359 chrUn_DS485584v1 1105 unplaced primary NW_001846873.1,DS485584.1,211000022280097 chrUn_DS485585v1 1103 unplaced primary NW_001846874.1,DS485585.1,211000022278862 chrUn_DS485587v1 1103 unplaced primary NW_001846876.1,DS485587.1,211000022279659 chrUn_DS485588v1 1103 unplaced primary NW_001846877.1,DS485588.1,211000022279160 chrUn_DS485589v1 1102 unplaced primary NW_001846878.1,DS485589.1,211000022280193 chrUn_DS485591v1 1102 unplaced primary NW_001846880.1,DS485591.1,211000022280150 chrUn_DS485593v1 1101 unplaced primary NW_001846882.1,DS485593.1,211000022279965 chrUn_DS485595v1 1101 unplaced primary NW_001846884.1,DS485595.1,211000022280079 chrUn_DS485601v1 1099 unplaced primary NW_001846890.1,DS485601.1,211000022280685 chrUn_DS485602v1 1099 unplaced primary NW_001846891.1,DS485602.1,211000022278197 chrUn_DS485605v1 1098 unplaced primary NW_001846894.1,DS485605.1,211000022279057 chrUn_DS485607v1 1097 unplaced primary NW_001846896.1,DS485607.1,211000022279051 chrUn_DS485608v1 1097 unplaced primary NW_001846897.1,DS485608.1,211000022278090 chrUn_DS485609v1 1096 unplaced primary NW_001846898.1,DS485609.1,211000022280256 chrUn_DS485610v1 1096 unplaced primary NW_001846899.1,DS485610.1,211000022279975 chrUn_DS485614v1 1094 unplaced primary NW_001846903.1,DS485614.1,211000022279336 chrUn_DS485621v1 1091 unplaced primary NW_001846910.1,DS485621.1,211000022279880 chrUn_DS485622v1 1090 unplaced primary NW_001846911.1,DS485622.1,211000022279151 chrUn_DS485623v1 1090 unplaced primary NW_001846912.1,DS485623.1,211000022278537 chrUn_DS485624v1 1090 unplaced primary NW_001846913.1,DS485624.1,211000022280291 chrUn_DS485627v1 1090 unplaced primary NW_001846916.1,DS485627.1,211000022280075 chrUn_DS485628v1 1089 unplaced primary NW_001846917.1,DS485628.1,211000022279943 chrUn_DS485630v1 1089 unplaced primary NW_001846919.1,DS485630.1,211000022279672 chrUn_DS485632v1 1088 unplaced primary NW_001846921.1,DS485632.1,211000022279374 chrUn_DS485634v1 1088 unplaced primary NW_001846923.1,DS485634.1,211000022278349 chrUn_DS485636v1 1088 unplaced primary NW_001846925.1,DS485636.1,211000022279533 chrUn_DS485640v1 1087 unplaced primary NW_001846929.1,DS485640.1,211000022280065 chrUn_DS485642v1 1087 unplaced primary NW_001846931.1,DS485642.1,211000022279551 chrUn_DS485643v1 1086 unplaced primary NW_001846932.1,DS485643.1,211000022278223 chrUn_DS485648v1 1086 unplaced primary NW_001846937.1,DS485648.1,211000022280051 chrUn_DS485650v1 1084 unplaced primary NW_001846939.1,DS485650.1,211000022278761 chrUn_DS485653v1 1084 unplaced primary NW_001846942.1,DS485653.1,211000022280240 chrUn_DS485654v1 1084 unplaced primary NW_001846943.1,DS485654.1,211000022278660 chrUn_DS485655v1 1083 unplaced primary NW_001846944.1,DS485655.1,211000022279781 chrUn_DS485656v1 1083 unplaced primary NW_001846945.1,DS485656.1,211000022279578 chrUn_DS485657v1 1083 unplaced primary NW_001846946.1,DS485657.1,211000022279569 chrUn_DS485659v1 1082 unplaced primary NW_001846948.1,DS485659.1,211000022278573 chrUn_DS485661v1 1081 unplaced primary NW_001846950.1,DS485661.1,211000022278592 chrUn_DS485664v1 1081 unplaced primary NW_001846953.1,DS485664.1,211000022278859 chrUn_DS485666v1 1080 unplaced primary NW_001846955.1,DS485666.1,211000022279369 chrUn_DS485667v1 1080 unplaced primary NW_001846956.1,DS485667.1,211000022279824 chrUn_DS485668v1 1080 unplaced primary NW_001846957.1,DS485668.1,211000022278878 chrUn_DS485670v1 1079 unplaced primary NW_001846959.1,DS485670.1,211000022280084 chrUn_DS485671v1 1079 unplaced primary NW_001846960.1,DS485671.1,211000022279154 chrUn_DS485673v1 1078 unplaced primary NW_001846962.1,DS485673.1,211000022278371 chrUn_DS485675v1 1078 unplaced primary NW_001846964.1,DS485675.1,211000022278301 chrUn_DS485678v1 1077 unplaced primary NW_001846967.1,DS485678.1,211000022278241 chrUn_DS485679v1 1077 unplaced primary NW_001846968.1,DS485679.1,211000022279252 chrUn_DS485681v1 1076 unplaced primary NW_001846970.1,DS485681.1,211000022279141 chrUn_DS485682v1 1076 unplaced primary NW_001846971.1,DS485682.1,211000022279013 chrUn_DS485683v1 1076 unplaced primary NW_001846972.1,DS485683.1,211000022278776 chrUn_DS485684v1 1076 unplaced primary NW_001846973.1,DS485684.1,211000022279155 chrUn_DS485686v1 1075 unplaced primary NW_001846975.1,DS485686.1,211000022278917 chrUn_DS485688v1 1075 unplaced primary NW_001846977.1,DS485688.1,211000022278903 chrUn_DS485692v1 1074 unplaced primary NW_001846981.1,DS485692.1,211000022279959 chrUn_DS485693v1 1074 unplaced primary NW_001846982.1,DS485693.1,211000022278730 chrUn_DS485694v1 1074 unplaced primary NW_001846983.1,DS485694.1,211000022280054 chrUn_DS485695v2 564 unplaced primary NW_001846984.2,DS485695.2,211000022280427 chrUn_DS485701v1 1072 unplaced primary NW_001846990.1,DS485701.1,211000022278600 chrUn_DS485703v1 1071 unplaced primary NW_001846992.1,DS485703.1,211000022278311 chrUn_DS485709v1 1070 unplaced primary NW_001846998.1,DS485709.1,211000022279624 chrUn_DS485711v1 1070 unplaced primary NW_001847000.1,DS485711.1,211000022278441 chrUn_DS485712v1 1070 unplaced primary NW_001847001.1,DS485712.1,211000022279430 chrUn_DS485714v1 1069 unplaced primary NW_001847003.1,DS485714.1,211000022279742 chrUn_DS485717v1 1069 unplaced primary NW_001847006.1,DS485717.1,211000022279592 chrUn_DS485722v1 1067 unplaced primary NW_001847011.1,DS485722.1,211000022278526 chrUn_DS485724v1 1067 unplaced primary NW_001847013.1,DS485724.1,211000022280350 chrUn_DS485725v1 1066 unplaced primary NW_001847014.1,DS485725.1,211000022279405 chrUn_DS485728v1 1064 unplaced primary NW_001847017.1,DS485728.1,211000022279727 chrUn_DS485729v1 1064 unplaced primary NW_001847018.1,DS485729.1,211000022279149 chrUn_DS485733v1 1063 unplaced primary NW_001847022.1,DS485733.1,211000022278276 chrUn_DS485737v1 1063 unplaced primary NW_001847026.1,DS485737.1,211000022279584 chrUn_DS485740v1 1063 unplaced primary NW_001847029.1,DS485740.1,211000022278699 chrUn_DS485741v1 1063 unplaced primary NW_001847030.1,DS485741.1,211000022278253 chrUn_DS485742v1 1062 unplaced primary NW_001847031.1,DS485742.1,211000022279242 chrUn_DS485743v1 1062 unplaced primary NW_001847032.1,DS485743.1,211000022278540 chrUn_DS485746v1 1062 unplaced primary NW_001847035.1,DS485746.1,211000022280142 chrUn_DS485747v1 1062 unplaced primary NW_001847036.1,DS485747.1,211000022278385 chrUn_DS485748v1 1061 unplaced primary NW_001847037.1,DS485748.1,211000022278260 chrUn_DS485750v1 1060 unplaced primary NW_001847039.1,DS485750.1,211000022279927 chrUn_DS485751v1 1060 unplaced primary NW_001847040.1,DS485751.1,211000022278881 chrUn_DS485753v1 1059 unplaced primary NW_001847042.1,DS485753.1,211000022278720 chrUn_DS485754v1 1059 unplaced primary NW_001847043.1,DS485754.1,211000022279952 chrUn_DS485757v1 1058 unplaced primary NW_001847046.1,DS485757.1,211000022279782 chrUn_DS485760v1 1058 unplaced primary NW_001847049.1,DS485760.1,211000022278106 chrUn_DS485766v1 1056 unplaced primary NW_001847055.1,DS485766.1,211000022278989 chrUn_DS485770v1 1055 unplaced primary NW_001847059.1,DS485770.1,211000022279814 chrUn_DS485773v1 1054 unplaced primary NW_001847062.1,DS485773.1,211000022278571 chrUn_DS485774v1 1053 unplaced primary NW_001847063.1,DS485774.1,211000022279885 chrUn_DS485775v1 1053 unplaced primary NW_001847064.1,DS485775.1,211000022279506 chrUn_DS485780v1 1053 unplaced primary NW_001847069.1,DS485780.1,211000022279572 chrUn_DS485781v1 1052 unplaced primary NW_001847070.1,DS485781.1,211000022278530 chrUn_DS485783v1 1052 unplaced primary NW_001847072.1,DS485783.1,211000022278199 chrUn_DS485788v1 1051 unplaced primary NW_001847077.1,DS485788.1,211000022278357 chrUn_DS485789v1 1051 unplaced primary NW_001847078.1,DS485789.1,211000022278419 chrUn_DS485792v1 1050 unplaced primary NW_001847081.1,DS485792.1,211000022280043 chrUn_DS485793v1 1050 unplaced primary NW_001847082.1,DS485793.1,211000022278410 chrUn_DS485794v1 1049 unplaced primary NW_001847083.1,DS485794.1,211000022278501 chrUn_DS485796v1 1049 unplaced primary NW_001847085.1,DS485796.1,211000022279424 chrUn_DS485802v1 1048 unplaced primary NW_001847091.1,DS485802.1,211000022279286 chrUn_DS485803v1 1048 unplaced primary NW_001847092.1,DS485803.1,211000022279258 chrUn_DS485806v1 1048 unplaced primary NW_001847095.1,DS485806.1,211000022280069 chrUn_DS485807v1 1048 unplaced primary NW_001847096.1,DS485807.1,211000022280149 chrUn_DS485808v1 1047 unplaced primary NW_001847097.1,DS485808.1,211000022278339 chrUn_DS485810v1 1047 unplaced primary NW_001847099.1,DS485810.1,211000022278641 chrUn_DS485812v1 1047 unplaced primary NW_001847101.1,DS485812.1,211000022278804 chrUn_DS485818v1 1045 unplaced primary NW_001847107.1,DS485818.1,211000022279465 chrUn_DS485820v1 1045 unplaced primary NW_001847109.1,DS485820.1,211000022279168 chrUn_DS485821v1 1045 unplaced primary NW_001847110.1,DS485821.1,211000022278535 chrUn_DS485822v1 1045 unplaced primary NW_001847111.1,DS485822.1,211000022278240 chrUn_DS485823v1 1044 unplaced primary NW_001847112.1,DS485823.1,211000022279387 chrUn_DS485825v1 1044 unplaced primary NW_001847114.1,DS485825.1,211000022278427 chrUn_DS485826v1 1044 unplaced primary NW_001847115.1,DS485826.1,211000022278985 chrUn_DS485827v1 1043 unplaced primary NW_001847116.1,DS485827.1,211000022279771 chrUn_DS485828v1 1043 unplaced primary NW_001847117.1,DS485828.1,211000022278996 chrUn_DS485832v1 1042 unplaced primary NW_001847121.1,DS485832.1,211000022280168 chrUn_DS485833v1 1042 unplaced primary NW_001847122.1,DS485833.1,211000022279740 chrUn_DS485838v1 1042 unplaced primary NW_001847127.1,DS485838.1,211000022278599 chrUn_DS485841v1 1041 unplaced primary NW_001847130.1,DS485841.1,211000022279329 chrUn_DS485842v1 1041 unplaced primary NW_001847131.1,DS485842.1,211000022278983 chrUn_DS485846v1 1040 unplaced primary NW_001847135.1,DS485846.1,211000022278305 chrUn_DS485847v1 1040 unplaced primary NW_001847136.1,DS485847.1,211000022279271 chrUn_DS485848v1 1040 unplaced primary NW_001847137.1,DS485848.1,211000022280117 chrUn_DS485850v1 1039 unplaced primary NW_001847139.1,DS485850.1,211000022279443 chrUn_DS485851v1 1039 unplaced primary NW_001847140.1,DS485851.1,211000022280025 chrUn_DS485853v1 1038 unplaced primary NW_001847142.1,DS485853.1,211000022278291 chrUn_DS485854v1 1038 unplaced primary NW_001847143.1,DS485854.1,211000022278517 chrUn_DS485859v1 1036 unplaced primary NW_001847148.1,DS485859.1,211000022278158 chrUn_DS485863v1 1035 unplaced primary NW_001847152.1,DS485863.1,211000022278970 chrUn_DS485864v1 1035 unplaced primary NW_001847153.1,DS485864.1,211000022278562 chrUn_DS485867v1 1035 unplaced primary NW_001847156.1,DS485867.1,211000022279053 chrUn_DS485868v1 1035 unplaced primary NW_001847157.1,DS485868.1,211000022279050 chrUn_DS485870v1 1033 unplaced primary NW_001847159.1,DS485870.1,211000022278453 chrUn_DS485872v1 1033 unplaced primary NW_001847161.1,DS485872.1,211000022278541 chrUn_DS485874v1 1033 unplaced primary NW_001847163.1,DS485874.1,211000022279906 chrUn_DS485876v1 1032 unplaced primary NW_001847165.1,DS485876.1,211000022279599 chrUn_DS485878v1 1032 unplaced primary NW_001847167.1,DS485878.1,211000022280178 chrUn_DS485880v1 1031 unplaced primary NW_001847169.1,DS485880.1,211000022279356 chrUn_DS485882v1 1031 unplaced primary NW_001847171.1,DS485882.1,211000022280014 chrUn_DS485883v1 1030 unplaced primary NW_001847172.1,DS485883.1,211000022278680 chrUn_DS485886v1 1030 unplaced primary NW_001847175.1,DS485886.1,211000022278588 chrUn_DS485887v1 1029 unplaced primary NW_001847176.1,DS485887.1,211000022279117 chrUn_DS485889v1 1029 unplaced primary NW_001847178.1,DS485889.1,211000022280011 chrUn_DS485891v1 1029 unplaced primary NW_001847180.1,DS485891.1,211000022278386 chrUn_DS485893v1 1029 unplaced primary NW_001847182.1,DS485893.1,211000022278948 chrUn_DS485897v1 1028 unplaced primary NW_001847186.1,DS485897.1,211000022280266 chrUn_DS485900v1 1027 unplaced primary NW_001847189.1,DS485900.1,211000022278884 chrUn_DS485902v1 1026 unplaced primary NW_001847191.1,DS485902.1,211000022279120 chrUn_DS485903v1 1026 unplaced primary NW_001847192.1,DS485903.1,211000022279351 chrUn_DS485904v1 1025 unplaced primary NW_001847193.1,DS485904.1,211000022278898 chrUn_DS485905v1 1025 unplaced primary NW_001847194.1,DS485905.1,211000022278972 chrUn_DS485906v1 1025 unplaced primary NW_001847195.1,DS485906.1,211000022278207 chrUn_DS485907v1 1025 unplaced primary NW_001847196.1,DS485907.1,211000022278377 chrUn_DS485911v1 1023 unplaced primary NW_001847200.1,DS485911.1,211000022279526 chrUn_DS485912v1 1022 unplaced primary NW_001847201.1,DS485912.1,211000022279262 chrUn_DS485915v1 1022 unplaced primary NW_001847204.1,DS485915.1,211000022279289 chrUn_DS485917v1 1022 unplaced primary NW_001847206.1,DS485917.1,211000022279195 chrUn_DS485918v1 1021 unplaced primary NW_001847207.1,DS485918.1,211000022279954 chrUn_DS485919v1 1021 unplaced primary NW_001847208.1,DS485919.1,211000022278031 chrUn_DS485923v1 1021 unplaced primary NW_001847212.1,DS485923.1,211000022279809 chrUn_DS485925v1 1020 unplaced primary NW_001847214.1,DS485925.1,211000022278287 chrUn_DS485929v1 1020 unplaced primary NW_001847218.1,DS485929.1,211000022278585 chrUn_DS485932v1 1019 unplaced primary NW_001847221.1,DS485932.1,211000022279785 chrUn_DS485933v1 1019 unplaced primary NW_001847222.1,DS485933.1,211000022279308 chrUn_DS485935v1 1019 unplaced primary NW_001847224.1,DS485935.1,211000022280681 chrUn_DS485939v1 1018 unplaced primary NW_001847228.1,DS485939.1,211000022279644 chrUn_DS485940v1 1018 unplaced primary NW_001847229.1,DS485940.1,211000022278759 chrUn_DS485944v1 1016 unplaced primary NW_001847233.1,DS485944.1,211000022279741 chrUn_DS485946v1 1016 unplaced primary NW_001847235.1,DS485946.1,211000022279736 chrUn_DS485947v1 1016 unplaced primary NW_001847236.1,DS485947.1,211000022279626 chrUn_DS485948v1 1015 unplaced primary NW_001847237.1,DS485948.1,211000022279609 chrUn_DS485952v1 1014 unplaced primary NW_001847241.1,DS485952.1,211000022279693 chrUn_DS485953v1 1014 unplaced primary NW_001847242.1,DS485953.1,211000022279792 chrUn_DS485954v1 1014 unplaced primary NW_001847243.1,DS485954.1,211000022278424 chrUn_DS485955v1 1014 unplaced primary NW_001847244.1,DS485955.1,211000022280290 chrUn_DS485957v1 1013 unplaced primary NW_001847246.1,DS485957.1,211000022278247 chrUn_DS485958v1 1013 unplaced primary NW_001847247.1,DS485958.1,211000022278258 chrUn_DS485964v1 1012 unplaced primary NW_001847253.1,DS485964.1,211000022279134 chrUn_DS485965v1 1012 unplaced primary NW_001847254.1,DS485965.1,211000022279215 chrUn_DS485966v1 1011 unplaced primary NW_001847255.1,DS485966.1,211000022279946 chrUn_DS485968v1 1011 unplaced primary NW_001847257.1,DS485968.1,211000022279342 chrUn_DS485969v1 1011 unplaced primary NW_001847258.1,DS485969.1,211000022279180 chrUn_DS485973v1 1010 unplaced primary NW_001847262.1,DS485973.1,211000022278272 chrUn_DS485979v1 1008 unplaced primary NW_001847268.1,DS485979.1,211000022278095 chrUn_DS485980v1 1008 unplaced primary NW_001847269.1,DS485980.1,211000022279200 chrUn_DS485982v1 1007 unplaced primary NW_001847271.1,DS485982.1,211000022278650 chrUn_DS485983v1 1006 unplaced primary NW_001847272.1,DS485983.1,211000022279353 chrUn_DS485984v1 1006 unplaced primary NW_001847273.1,DS485984.1,211000022278152 chrUn_DS485985v1 1006 unplaced primary NW_001847274.1,DS485985.1,211000022278718 chrUn_DS485986v1 1005 unplaced primary NW_001847275.1,DS485986.1,211000022279384 chrUn_DS485988v1 1005 unplaced primary NW_001847277.1,DS485988.1,211000022280165 chrUn_DS485989v1 1005 unplaced primary NW_001847278.1,DS485989.1,211000022278539 chrUn_DS485991v1 1005 unplaced primary NW_001847280.1,DS485991.1,211000022279132 chrUn_DS485995v1 1004 unplaced primary NW_001847284.1,DS485995.1,211000022278137 chrUn_DS485996v1 1004 unplaced primary NW_001847285.1,DS485996.1,211000022279409 chrUn_DS485997v1 1004 unplaced primary NW_001847286.1,DS485997.1,211000022279103 chrUn_DS485998v1 1003 unplaced primary NW_001847287.1,DS485998.1,211000022278074 chrUn_DS486002v1 1001 unplaced primary NW_001847291.1,DS486002.1,211000022278179 chrUn_DS486004v1 1001 unplaced primary NW_001847293.1,DS486004.1,211000022279016 chrUn_DS486005v1 1001 unplaced primary NW_001847294.1,DS486005.1,211000022278576 chrUn_DS486008v1 1001 unplaced primary NW_001847297.1,DS486008.1,211000022278384 open2c-bioframe-4fe9b25/bioframe/io/data/hg19.cytoband.tsv000066400000000000000000000740751477525772300233600ustar00rootroot00000000000000chrom start end band stain chr1 0 2300000 p36.33 gneg chr1 2300000 5400000 p36.32 gpos25 chr1 5400000 7200000 p36.31 gneg chr1 7200000 9200000 p36.23 gpos25 chr1 9200000 12700000 p36.22 gneg chr1 12700000 16200000 p36.21 gpos50 chr1 16200000 20400000 p36.13 gneg chr1 20400000 23900000 p36.12 gpos25 chr1 23900000 28000000 p36.11 gneg chr1 28000000 30200000 p35.3 gpos25 chr1 30200000 32400000 p35.2 gneg chr1 32400000 34600000 p35.1 gpos25 chr1 34600000 40100000 p34.3 gneg chr1 40100000 44100000 p34.2 gpos25 chr1 44100000 46800000 p34.1 gneg chr1 46800000 50700000 p33 gpos75 chr1 50700000 56100000 p32.3 gneg chr1 56100000 59000000 p32.2 gpos50 chr1 59000000 61300000 p32.1 gneg chr1 61300000 68900000 p31.3 gpos50 chr1 68900000 69700000 p31.2 gneg chr1 69700000 84900000 p31.1 gpos100 chr1 84900000 88400000 p22.3 gneg chr1 88400000 92000000 p22.2 gpos75 chr1 92000000 94700000 p22.1 gneg chr1 94700000 99700000 p21.3 gpos75 chr1 99700000 102200000 p21.2 gneg chr1 102200000 107200000 p21.1 gpos100 chr1 107200000 111800000 p13.3 gneg chr1 111800000 116100000 p13.2 gpos50 chr1 116100000 117800000 p13.1 gneg chr1 117800000 120600000 p12 gpos50 chr1 120600000 121500000 p11.2 gneg chr1 121500000 125000000 p11.1 acen chr1 125000000 128900000 q11 acen chr1 128900000 142600000 q12 gvar chr1 142600000 147000000 q21.1 gneg chr1 147000000 150300000 q21.2 gpos50 chr1 150300000 155000000 q21.3 gneg chr1 155000000 156500000 q22 gpos50 chr1 156500000 159100000 q23.1 gneg chr1 159100000 160500000 q23.2 gpos50 chr1 160500000 165500000 q23.3 gneg chr1 165500000 167200000 q24.1 gpos50 chr1 167200000 170900000 q24.2 gneg chr1 170900000 172900000 q24.3 gpos75 chr1 172900000 176000000 q25.1 gneg chr1 176000000 180300000 q25.2 gpos50 chr1 180300000 185800000 q25.3 gneg chr1 185800000 190800000 q31.1 gpos100 chr1 190800000 193800000 q31.2 gneg chr1 193800000 198700000 q31.3 gpos100 chr1 198700000 207200000 q32.1 gneg chr1 207200000 211500000 q32.2 gpos25 chr1 211500000 214500000 q32.3 gneg chr1 214500000 224100000 q41 gpos100 chr1 224100000 224600000 q42.11 gneg chr1 224600000 227000000 q42.12 gpos25 chr1 227000000 230700000 q42.13 gneg chr1 230700000 234700000 q42.2 gpos50 chr1 234700000 236600000 q42.3 gneg chr1 236600000 243700000 q43 gpos75 chr1 243700000 249250621 q44 gneg chr2 0 4400000 p25.3 gneg chr2 4400000 7100000 p25.2 gpos50 chr2 7100000 12200000 p25.1 gneg chr2 12200000 16700000 p24.3 gpos75 chr2 16700000 19200000 p24.2 gneg chr2 19200000 24000000 p24.1 gpos75 chr2 24000000 27900000 p23.3 gneg chr2 27900000 30000000 p23.2 gpos25 chr2 30000000 32100000 p23.1 gneg chr2 32100000 36600000 p22.3 gpos75 chr2 36600000 38600000 p22.2 gneg chr2 38600000 41800000 p22.1 gpos50 chr2 41800000 47800000 p21 gneg chr2 47800000 52900000 p16.3 gpos100 chr2 52900000 55000000 p16.2 gneg chr2 55000000 61300000 p16.1 gpos100 chr2 61300000 64100000 p15 gneg chr2 64100000 68600000 p14 gpos50 chr2 68600000 71500000 p13.3 gneg chr2 71500000 73500000 p13.2 gpos50 chr2 73500000 75000000 p13.1 gneg chr2 75000000 83300000 p12 gpos100 chr2 83300000 90500000 p11.2 gneg chr2 90500000 93300000 p11.1 acen chr2 93300000 96800000 q11.1 acen chr2 96800000 102700000 q11.2 gneg chr2 102700000 106000000 q12.1 gpos50 chr2 106000000 107500000 q12.2 gneg chr2 107500000 110200000 q12.3 gpos25 chr2 110200000 114400000 q13 gneg chr2 114400000 118800000 q14.1 gpos50 chr2 118800000 122400000 q14.2 gneg chr2 122400000 129900000 q14.3 gpos50 chr2 129900000 132500000 q21.1 gneg chr2 132500000 135100000 q21.2 gpos25 chr2 135100000 136800000 q21.3 gneg chr2 136800000 142200000 q22.1 gpos100 chr2 142200000 144100000 q22.2 gneg chr2 144100000 148700000 q22.3 gpos100 chr2 148700000 149900000 q23.1 gneg chr2 149900000 150500000 q23.2 gpos25 chr2 150500000 154900000 q23.3 gneg chr2 154900000 159800000 q24.1 gpos75 chr2 159800000 163700000 q24.2 gneg chr2 163700000 169700000 q24.3 gpos75 chr2 169700000 178000000 q31.1 gneg chr2 178000000 180600000 q31.2 gpos50 chr2 180600000 183000000 q31.3 gneg chr2 183000000 189400000 q32.1 gpos75 chr2 189400000 191900000 q32.2 gneg chr2 191900000 197400000 q32.3 gpos75 chr2 197400000 203300000 q33.1 gneg chr2 203300000 204900000 q33.2 gpos50 chr2 204900000 209000000 q33.3 gneg chr2 209000000 215300000 q34 gpos100 chr2 215300000 221500000 q35 gneg chr2 221500000 225200000 q36.1 gpos75 chr2 225200000 226100000 q36.2 gneg chr2 226100000 231000000 q36.3 gpos100 chr2 231000000 235600000 q37.1 gneg chr2 235600000 237300000 q37.2 gpos50 chr2 237300000 243199373 q37.3 gneg chr3 0 2800000 p26.3 gpos50 chr3 2800000 4000000 p26.2 gneg chr3 4000000 8700000 p26.1 gpos50 chr3 8700000 11800000 p25.3 gneg chr3 11800000 13300000 p25.2 gpos25 chr3 13300000 16400000 p25.1 gneg chr3 16400000 23900000 p24.3 gpos100 chr3 23900000 26400000 p24.2 gneg chr3 26400000 30900000 p24.1 gpos75 chr3 30900000 32100000 p23 gneg chr3 32100000 36500000 p22.3 gpos50 chr3 36500000 39400000 p22.2 gneg chr3 39400000 43700000 p22.1 gpos75 chr3 43700000 44100000 p21.33 gneg chr3 44100000 44200000 p21.32 gpos50 chr3 44200000 50600000 p21.31 gneg chr3 50600000 52300000 p21.2 gpos25 chr3 52300000 54400000 p21.1 gneg chr3 54400000 58600000 p14.3 gpos50 chr3 58600000 63700000 p14.2 gneg chr3 63700000 69800000 p14.1 gpos50 chr3 69800000 74200000 p13 gneg chr3 74200000 79800000 p12.3 gpos75 chr3 79800000 83500000 p12.2 gneg chr3 83500000 87200000 p12.1 gpos75 chr3 87200000 87900000 p11.2 gneg chr3 87900000 91000000 p11.1 acen chr3 91000000 93900000 q11.1 acen chr3 93900000 98300000 q11.2 gvar chr3 98300000 100000000 q12.1 gneg chr3 100000000 100900000 q12.2 gpos25 chr3 100900000 102800000 q12.3 gneg chr3 102800000 106200000 q13.11 gpos75 chr3 106200000 107900000 q13.12 gneg chr3 107900000 111300000 q13.13 gpos50 chr3 111300000 113500000 q13.2 gneg chr3 113500000 117300000 q13.31 gpos75 chr3 117300000 119000000 q13.32 gneg chr3 119000000 121900000 q13.33 gpos75 chr3 121900000 123800000 q21.1 gneg chr3 123800000 125800000 q21.2 gpos25 chr3 125800000 129200000 q21.3 gneg chr3 129200000 133700000 q22.1 gpos25 chr3 133700000 135700000 q22.2 gneg chr3 135700000 138700000 q22.3 gpos25 chr3 138700000 142800000 q23 gneg chr3 142800000 148900000 q24 gpos100 chr3 148900000 152100000 q25.1 gneg chr3 152100000 155000000 q25.2 gpos50 chr3 155000000 157000000 q25.31 gneg chr3 157000000 159000000 q25.32 gpos50 chr3 159000000 160700000 q25.33 gneg chr3 160700000 167600000 q26.1 gpos100 chr3 167600000 170900000 q26.2 gneg chr3 170900000 175700000 q26.31 gpos75 chr3 175700000 179000000 q26.32 gneg chr3 179000000 182700000 q26.33 gpos75 chr3 182700000 184500000 q27.1 gneg chr3 184500000 186000000 q27.2 gpos25 chr3 186000000 187900000 q27.3 gneg chr3 187900000 192300000 q28 gpos75 chr3 192300000 198022430 q29 gneg chr4 0 4500000 p16.3 gneg chr4 4500000 6000000 p16.2 gpos25 chr4 6000000 11300000 p16.1 gneg chr4 11300000 15200000 p15.33 gpos50 chr4 15200000 17800000 p15.32 gneg chr4 17800000 21300000 p15.31 gpos75 chr4 21300000 27700000 p15.2 gneg chr4 27700000 35800000 p15.1 gpos100 chr4 35800000 41200000 p14 gneg chr4 41200000 44600000 p13 gpos50 chr4 44600000 48200000 p12 gneg chr4 48200000 50400000 p11 acen chr4 50400000 52700000 q11 acen chr4 52700000 59500000 q12 gneg chr4 59500000 66600000 q13.1 gpos100 chr4 66600000 70500000 q13.2 gneg chr4 70500000 76300000 q13.3 gpos75 chr4 76300000 78900000 q21.1 gneg chr4 78900000 82400000 q21.21 gpos50 chr4 82400000 84100000 q21.22 gneg chr4 84100000 86900000 q21.23 gpos25 chr4 86900000 88000000 q21.3 gneg chr4 88000000 93700000 q22.1 gpos75 chr4 93700000 95100000 q22.2 gneg chr4 95100000 98800000 q22.3 gpos75 chr4 98800000 101100000 q23 gneg chr4 101100000 107700000 q24 gpos50 chr4 107700000 114100000 q25 gneg chr4 114100000 120800000 q26 gpos75 chr4 120800000 123800000 q27 gneg chr4 123800000 128800000 q28.1 gpos50 chr4 128800000 131100000 q28.2 gneg chr4 131100000 139500000 q28.3 gpos100 chr4 139500000 141500000 q31.1 gneg chr4 141500000 146800000 q31.21 gpos25 chr4 146800000 148500000 q31.22 gneg chr4 148500000 151100000 q31.23 gpos25 chr4 151100000 155600000 q31.3 gneg chr4 155600000 161800000 q32.1 gpos100 chr4 161800000 164500000 q32.2 gneg chr4 164500000 170100000 q32.3 gpos100 chr4 170100000 171900000 q33 gneg chr4 171900000 176300000 q34.1 gpos75 chr4 176300000 177500000 q34.2 gneg chr4 177500000 183200000 q34.3 gpos100 chr4 183200000 187100000 q35.1 gneg chr4 187100000 191154276 q35.2 gpos25 chr5 0 4500000 p15.33 gneg chr5 4500000 6300000 p15.32 gpos25 chr5 6300000 9800000 p15.31 gneg chr5 9800000 15000000 p15.2 gpos50 chr5 15000000 18400000 p15.1 gneg chr5 18400000 23300000 p14.3 gpos100 chr5 23300000 24600000 p14.2 gneg chr5 24600000 28900000 p14.1 gpos100 chr5 28900000 33800000 p13.3 gneg chr5 33800000 38400000 p13.2 gpos25 chr5 38400000 42500000 p13.1 gneg chr5 42500000 46100000 p12 gpos50 chr5 46100000 48400000 p11 acen chr5 48400000 50700000 q11.1 acen chr5 50700000 58900000 q11.2 gneg chr5 58900000 62900000 q12.1 gpos75 chr5 62900000 63200000 q12.2 gneg chr5 63200000 66700000 q12.3 gpos75 chr5 66700000 68400000 q13.1 gneg chr5 68400000 73300000 q13.2 gpos50 chr5 73300000 76900000 q13.3 gneg chr5 76900000 81400000 q14.1 gpos50 chr5 81400000 82800000 q14.2 gneg chr5 82800000 92300000 q14.3 gpos100 chr5 92300000 98200000 q15 gneg chr5 98200000 102800000 q21.1 gpos100 chr5 102800000 104500000 q21.2 gneg chr5 104500000 109600000 q21.3 gpos100 chr5 109600000 111500000 q22.1 gneg chr5 111500000 113100000 q22.2 gpos50 chr5 113100000 115200000 q22.3 gneg chr5 115200000 121400000 q23.1 gpos100 chr5 121400000 127300000 q23.2 gneg chr5 127300000 130600000 q23.3 gpos100 chr5 130600000 136200000 q31.1 gneg chr5 136200000 139500000 q31.2 gpos25 chr5 139500000 144500000 q31.3 gneg chr5 144500000 149800000 q32 gpos75 chr5 149800000 152700000 q33.1 gneg chr5 152700000 155700000 q33.2 gpos50 chr5 155700000 159900000 q33.3 gneg chr5 159900000 168500000 q34 gpos100 chr5 168500000 172800000 q35.1 gneg chr5 172800000 176600000 q35.2 gpos25 chr5 176600000 180915260 q35.3 gneg chr6 0 2300000 p25.3 gneg chr6 2300000 4200000 p25.2 gpos25 chr6 4200000 7100000 p25.1 gneg chr6 7100000 10600000 p24.3 gpos50 chr6 10600000 11600000 p24.2 gneg chr6 11600000 13400000 p24.1 gpos25 chr6 13400000 15200000 p23 gneg chr6 15200000 25200000 p22.3 gpos75 chr6 25200000 27000000 p22.2 gneg chr6 27000000 30400000 p22.1 gpos50 chr6 30400000 32100000 p21.33 gneg chr6 32100000 33500000 p21.32 gpos25 chr6 33500000 36600000 p21.31 gneg chr6 36600000 40500000 p21.2 gpos25 chr6 40500000 46200000 p21.1 gneg chr6 46200000 51800000 p12.3 gpos100 chr6 51800000 52900000 p12.2 gneg chr6 52900000 57000000 p12.1 gpos100 chr6 57000000 58700000 p11.2 gneg chr6 58700000 61000000 p11.1 acen chr6 61000000 63300000 q11.1 acen chr6 63300000 63400000 q11.2 gneg chr6 63400000 70000000 q12 gpos100 chr6 70000000 75900000 q13 gneg chr6 75900000 83900000 q14.1 gpos50 chr6 83900000 84900000 q14.2 gneg chr6 84900000 88000000 q14.3 gpos50 chr6 88000000 93100000 q15 gneg chr6 93100000 99500000 q16.1 gpos100 chr6 99500000 100600000 q16.2 gneg chr6 100600000 105500000 q16.3 gpos100 chr6 105500000 114600000 q21 gneg chr6 114600000 118300000 q22.1 gpos75 chr6 118300000 118500000 q22.2 gneg chr6 118500000 126100000 q22.31 gpos100 chr6 126100000 127100000 q22.32 gneg chr6 127100000 130300000 q22.33 gpos75 chr6 130300000 131200000 q23.1 gneg chr6 131200000 135200000 q23.2 gpos50 chr6 135200000 139000000 q23.3 gneg chr6 139000000 142800000 q24.1 gpos75 chr6 142800000 145600000 q24.2 gneg chr6 145600000 149000000 q24.3 gpos75 chr6 149000000 152500000 q25.1 gneg chr6 152500000 155500000 q25.2 gpos50 chr6 155500000 161000000 q25.3 gneg chr6 161000000 164500000 q26 gpos50 chr6 164500000 171115067 q27 gneg chr7 0 2800000 p22.3 gneg chr7 2800000 4500000 p22.2 gpos25 chr7 4500000 7300000 p22.1 gneg chr7 7300000 13800000 p21.3 gpos100 chr7 13800000 16500000 p21.2 gneg chr7 16500000 20900000 p21.1 gpos100 chr7 20900000 25500000 p15.3 gneg chr7 25500000 28000000 p15.2 gpos50 chr7 28000000 28800000 p15.1 gneg chr7 28800000 35000000 p14.3 gpos75 chr7 35000000 37200000 p14.2 gneg chr7 37200000 43300000 p14.1 gpos75 chr7 43300000 45400000 p13 gneg chr7 45400000 49000000 p12.3 gpos75 chr7 49000000 50500000 p12.2 gneg chr7 50500000 54000000 p12.1 gpos75 chr7 54000000 58000000 p11.2 gneg chr7 58000000 59900000 p11.1 acen chr7 59900000 61700000 q11.1 acen chr7 61700000 67000000 q11.21 gneg chr7 67000000 72200000 q11.22 gpos50 chr7 72200000 77500000 q11.23 gneg chr7 77500000 86400000 q21.11 gpos100 chr7 86400000 88200000 q21.12 gneg chr7 88200000 91100000 q21.13 gpos75 chr7 91100000 92800000 q21.2 gneg chr7 92800000 98000000 q21.3 gpos75 chr7 98000000 103800000 q22.1 gneg chr7 103800000 104500000 q22.2 gpos50 chr7 104500000 107400000 q22.3 gneg chr7 107400000 114600000 q31.1 gpos75 chr7 114600000 117400000 q31.2 gneg chr7 117400000 121100000 q31.31 gpos75 chr7 121100000 123800000 q31.32 gneg chr7 123800000 127100000 q31.33 gpos75 chr7 127100000 129200000 q32.1 gneg chr7 129200000 130400000 q32.2 gpos25 chr7 130400000 132600000 q32.3 gneg chr7 132600000 138200000 q33 gpos50 chr7 138200000 143100000 q34 gneg chr7 143100000 147900000 q35 gpos75 chr7 147900000 152600000 q36.1 gneg chr7 152600000 155100000 q36.2 gpos25 chr7 155100000 159138663 q36.3 gneg chr8 0 2200000 p23.3 gneg chr8 2200000 6200000 p23.2 gpos75 chr8 6200000 12700000 p23.1 gneg chr8 12700000 19000000 p22 gpos100 chr8 19000000 23300000 p21.3 gneg chr8 23300000 27400000 p21.2 gpos50 chr8 27400000 28800000 p21.1 gneg chr8 28800000 36500000 p12 gpos75 chr8 36500000 38300000 p11.23 gneg chr8 38300000 39700000 p11.22 gpos25 chr8 39700000 43100000 p11.21 gneg chr8 43100000 45600000 p11.1 acen chr8 45600000 48100000 q11.1 acen chr8 48100000 52200000 q11.21 gneg chr8 52200000 52600000 q11.22 gpos75 chr8 52600000 55500000 q11.23 gneg chr8 55500000 61600000 q12.1 gpos50 chr8 61600000 62200000 q12.2 gneg chr8 62200000 66000000 q12.3 gpos50 chr8 66000000 68000000 q13.1 gneg chr8 68000000 70500000 q13.2 gpos50 chr8 70500000 73900000 q13.3 gneg chr8 73900000 78300000 q21.11 gpos100 chr8 78300000 80100000 q21.12 gneg chr8 80100000 84600000 q21.13 gpos75 chr8 84600000 86900000 q21.2 gneg chr8 86900000 93300000 q21.3 gpos100 chr8 93300000 99000000 q22.1 gneg chr8 99000000 101600000 q22.2 gpos25 chr8 101600000 106200000 q22.3 gneg chr8 106200000 110500000 q23.1 gpos75 chr8 110500000 112100000 q23.2 gneg chr8 112100000 117700000 q23.3 gpos100 chr8 117700000 119200000 q24.11 gneg chr8 119200000 122500000 q24.12 gpos50 chr8 122500000 127300000 q24.13 gneg chr8 127300000 131500000 q24.21 gpos50 chr8 131500000 136400000 q24.22 gneg chr8 136400000 139900000 q24.23 gpos75 chr8 139900000 146364022 q24.3 gneg chr9 0 2200000 p24.3 gneg chr9 2200000 4600000 p24.2 gpos25 chr9 4600000 9000000 p24.1 gneg chr9 9000000 14200000 p23 gpos75 chr9 14200000 16600000 p22.3 gneg chr9 16600000 18500000 p22.2 gpos25 chr9 18500000 19900000 p22.1 gneg chr9 19900000 25600000 p21.3 gpos100 chr9 25600000 28000000 p21.2 gneg chr9 28000000 33200000 p21.1 gpos100 chr9 33200000 36300000 p13.3 gneg chr9 36300000 38400000 p13.2 gpos25 chr9 38400000 41000000 p13.1 gneg chr9 41000000 43600000 p12 gpos50 chr9 43600000 47300000 p11.2 gneg chr9 47300000 49000000 p11.1 acen chr9 49000000 50700000 q11 acen chr9 50700000 65900000 q12 gvar chr9 65900000 68700000 q13 gneg chr9 68700000 72200000 q21.11 gpos25 chr9 72200000 74000000 q21.12 gneg chr9 74000000 79200000 q21.13 gpos50 chr9 79200000 81100000 q21.2 gneg chr9 81100000 84100000 q21.31 gpos50 chr9 84100000 86900000 q21.32 gneg chr9 86900000 90400000 q21.33 gpos50 chr9 90400000 91800000 q22.1 gneg chr9 91800000 93900000 q22.2 gpos25 chr9 93900000 96600000 q22.31 gneg chr9 96600000 99300000 q22.32 gpos25 chr9 99300000 102600000 q22.33 gneg chr9 102600000 108200000 q31.1 gpos100 chr9 108200000 111300000 q31.2 gneg chr9 111300000 114900000 q31.3 gpos25 chr9 114900000 117700000 q32 gneg chr9 117700000 122500000 q33.1 gpos75 chr9 122500000 125800000 q33.2 gneg chr9 125800000 130300000 q33.3 gpos25 chr9 130300000 133500000 q34.11 gneg chr9 133500000 134000000 q34.12 gpos25 chr9 134000000 135900000 q34.13 gneg chr9 135900000 137400000 q34.2 gpos25 chr9 137400000 141213431 q34.3 gneg chr10 0 3000000 p15.3 gneg chr10 3000000 3800000 p15.2 gpos25 chr10 3800000 6600000 p15.1 gneg chr10 6600000 12200000 p14 gpos75 chr10 12200000 17300000 p13 gneg chr10 17300000 18600000 p12.33 gpos75 chr10 18600000 18700000 p12.32 gneg chr10 18700000 22600000 p12.31 gpos75 chr10 22600000 24600000 p12.2 gneg chr10 24600000 29600000 p12.1 gpos50 chr10 29600000 31300000 p11.23 gneg chr10 31300000 34400000 p11.22 gpos25 chr10 34400000 38000000 p11.21 gneg chr10 38000000 40200000 p11.1 acen chr10 40200000 42300000 q11.1 acen chr10 42300000 46100000 q11.21 gneg chr10 46100000 49900000 q11.22 gpos25 chr10 49900000 52900000 q11.23 gneg chr10 52900000 61200000 q21.1 gpos100 chr10 61200000 64500000 q21.2 gneg chr10 64500000 70600000 q21.3 gpos100 chr10 70600000 74900000 q22.1 gneg chr10 74900000 77700000 q22.2 gpos50 chr10 77700000 82000000 q22.3 gneg chr10 82000000 87900000 q23.1 gpos100 chr10 87900000 89500000 q23.2 gneg chr10 89500000 92900000 q23.31 gpos75 chr10 92900000 94100000 q23.32 gneg chr10 94100000 97000000 q23.33 gpos50 chr10 97000000 99300000 q24.1 gneg chr10 99300000 101900000 q24.2 gpos50 chr10 101900000 103000000 q24.31 gneg chr10 103000000 104900000 q24.32 gpos25 chr10 104900000 105800000 q24.33 gneg chr10 105800000 111900000 q25.1 gpos100 chr10 111900000 114900000 q25.2 gneg chr10 114900000 119100000 q25.3 gpos75 chr10 119100000 121700000 q26.11 gneg chr10 121700000 123100000 q26.12 gpos50 chr10 123100000 127500000 q26.13 gneg chr10 127500000 130600000 q26.2 gpos50 chr10 130600000 135534747 q26.3 gneg chr11 0 2800000 p15.5 gneg chr11 2800000 10700000 p15.4 gpos50 chr11 10700000 12700000 p15.3 gneg chr11 12700000 16200000 p15.2 gpos50 chr11 16200000 21700000 p15.1 gneg chr11 21700000 26100000 p14.3 gpos100 chr11 26100000 27200000 p14.2 gneg chr11 27200000 31000000 p14.1 gpos75 chr11 31000000 36400000 p13 gneg chr11 36400000 43500000 p12 gpos100 chr11 43500000 48800000 p11.2 gneg chr11 48800000 51600000 p11.12 gpos75 chr11 51600000 53700000 p11.11 acen chr11 53700000 55700000 q11 acen chr11 55700000 59900000 q12.1 gpos75 chr11 59900000 61700000 q12.2 gneg chr11 61700000 63400000 q12.3 gpos25 chr11 63400000 65900000 q13.1 gneg chr11 65900000 68400000 q13.2 gpos25 chr11 68400000 70400000 q13.3 gneg chr11 70400000 75200000 q13.4 gpos50 chr11 75200000 77100000 q13.5 gneg chr11 77100000 85600000 q14.1 gpos100 chr11 85600000 88300000 q14.2 gneg chr11 88300000 92800000 q14.3 gpos100 chr11 92800000 97200000 q21 gneg chr11 97200000 102100000 q22.1 gpos100 chr11 102100000 102900000 q22.2 gneg chr11 102900000 110400000 q22.3 gpos100 chr11 110400000 112500000 q23.1 gneg chr11 112500000 114500000 q23.2 gpos50 chr11 114500000 121200000 q23.3 gneg chr11 121200000 123900000 q24.1 gpos50 chr11 123900000 127800000 q24.2 gneg chr11 127800000 130800000 q24.3 gpos50 chr11 130800000 135006516 q25 gneg chr12 0 3300000 p13.33 gneg chr12 3300000 5400000 p13.32 gpos25 chr12 5400000 10100000 p13.31 gneg chr12 10100000 12800000 p13.2 gpos75 chr12 12800000 14800000 p13.1 gneg chr12 14800000 20000000 p12.3 gpos100 chr12 20000000 21300000 p12.2 gneg chr12 21300000 26500000 p12.1 gpos100 chr12 26500000 27800000 p11.23 gneg chr12 27800000 30700000 p11.22 gpos50 chr12 30700000 33300000 p11.21 gneg chr12 33300000 35800000 p11.1 acen chr12 35800000 38200000 q11 acen chr12 38200000 46400000 q12 gpos100 chr12 46400000 49100000 q13.11 gneg chr12 49100000 51500000 q13.12 gpos25 chr12 51500000 54900000 q13.13 gneg chr12 54900000 56600000 q13.2 gpos25 chr12 56600000 58100000 q13.3 gneg chr12 58100000 63100000 q14.1 gpos75 chr12 63100000 65100000 q14.2 gneg chr12 65100000 67700000 q14.3 gpos50 chr12 67700000 71500000 q15 gneg chr12 71500000 75700000 q21.1 gpos75 chr12 75700000 80300000 q21.2 gneg chr12 80300000 86700000 q21.31 gpos100 chr12 86700000 89000000 q21.32 gneg chr12 89000000 92600000 q21.33 gpos100 chr12 92600000 96200000 q22 gneg chr12 96200000 101600000 q23.1 gpos75 chr12 101600000 103800000 q23.2 gneg chr12 103800000 109000000 q23.3 gpos50 chr12 109000000 111700000 q24.11 gneg chr12 111700000 112300000 q24.12 gpos25 chr12 112300000 114300000 q24.13 gneg chr12 114300000 116800000 q24.21 gpos50 chr12 116800000 118100000 q24.22 gneg chr12 118100000 120700000 q24.23 gpos50 chr12 120700000 125900000 q24.31 gneg chr12 125900000 129300000 q24.32 gpos50 chr12 129300000 133851895 q24.33 gneg chr13 0 4500000 p13 gvar chr13 4500000 10000000 p12 stalk chr13 10000000 16300000 p11.2 gvar chr13 16300000 17900000 p11.1 acen chr13 17900000 19500000 q11 acen chr13 19500000 23300000 q12.11 gneg chr13 23300000 25500000 q12.12 gpos25 chr13 25500000 27800000 q12.13 gneg chr13 27800000 28900000 q12.2 gpos25 chr13 28900000 32200000 q12.3 gneg chr13 32200000 34000000 q13.1 gpos50 chr13 34000000 35500000 q13.2 gneg chr13 35500000 40100000 q13.3 gpos75 chr13 40100000 45200000 q14.11 gneg chr13 45200000 45800000 q14.12 gpos25 chr13 45800000 47300000 q14.13 gneg chr13 47300000 50900000 q14.2 gpos50 chr13 50900000 55300000 q14.3 gneg chr13 55300000 59600000 q21.1 gpos100 chr13 59600000 62300000 q21.2 gneg chr13 62300000 65700000 q21.31 gpos75 chr13 65700000 68600000 q21.32 gneg chr13 68600000 73300000 q21.33 gpos100 chr13 73300000 75400000 q22.1 gneg chr13 75400000 77200000 q22.2 gpos50 chr13 77200000 79000000 q22.3 gneg chr13 79000000 87700000 q31.1 gpos100 chr13 87700000 90000000 q31.2 gneg chr13 90000000 95000000 q31.3 gpos100 chr13 95000000 98200000 q32.1 gneg chr13 98200000 99300000 q32.2 gpos25 chr13 99300000 101700000 q32.3 gneg chr13 101700000 104800000 q33.1 gpos100 chr13 104800000 107000000 q33.2 gneg chr13 107000000 110300000 q33.3 gpos100 chr13 110300000 115169878 q34 gneg chr14 0 3700000 p13 gvar chr14 3700000 8100000 p12 stalk chr14 8100000 16100000 p11.2 gvar chr14 16100000 17600000 p11.1 acen chr14 17600000 19100000 q11.1 acen chr14 19100000 24600000 q11.2 gneg chr14 24600000 33300000 q12 gpos100 chr14 33300000 35300000 q13.1 gneg chr14 35300000 36600000 q13.2 gpos50 chr14 36600000 37800000 q13.3 gneg chr14 37800000 43500000 q21.1 gpos100 chr14 43500000 47200000 q21.2 gneg chr14 47200000 50900000 q21.3 gpos100 chr14 50900000 54100000 q22.1 gneg chr14 54100000 55500000 q22.2 gpos25 chr14 55500000 58100000 q22.3 gneg chr14 58100000 62100000 q23.1 gpos75 chr14 62100000 64800000 q23.2 gneg chr14 64800000 67900000 q23.3 gpos50 chr14 67900000 70200000 q24.1 gneg chr14 70200000 73800000 q24.2 gpos50 chr14 73800000 79300000 q24.3 gneg chr14 79300000 83600000 q31.1 gpos100 chr14 83600000 84900000 q31.2 gneg chr14 84900000 89800000 q31.3 gpos100 chr14 89800000 91900000 q32.11 gneg chr14 91900000 94700000 q32.12 gpos25 chr14 94700000 96300000 q32.13 gneg chr14 96300000 101400000 q32.2 gpos50 chr14 101400000 103200000 q32.31 gneg chr14 103200000 104000000 q32.32 gpos50 chr14 104000000 107349540 q32.33 gneg chr15 0 3900000 p13 gvar chr15 3900000 8700000 p12 stalk chr15 8700000 15800000 p11.2 gvar chr15 15800000 19000000 p11.1 acen chr15 19000000 20700000 q11.1 acen chr15 20700000 25700000 q11.2 gneg chr15 25700000 28100000 q12 gpos50 chr15 28100000 30300000 q13.1 gneg chr15 30300000 31200000 q13.2 gpos50 chr15 31200000 33600000 q13.3 gneg chr15 33600000 40100000 q14 gpos75 chr15 40100000 42800000 q15.1 gneg chr15 42800000 43600000 q15.2 gpos25 chr15 43600000 44800000 q15.3 gneg chr15 44800000 49500000 q21.1 gpos75 chr15 49500000 52900000 q21.2 gneg chr15 52900000 59100000 q21.3 gpos75 chr15 59100000 59300000 q22.1 gneg chr15 59300000 63700000 q22.2 gpos25 chr15 63700000 67200000 q22.31 gneg chr15 67200000 67300000 q22.32 gpos25 chr15 67300000 67500000 q22.33 gneg chr15 67500000 72700000 q23 gpos25 chr15 72700000 75200000 q24.1 gneg chr15 75200000 76600000 q24.2 gpos25 chr15 76600000 78300000 q24.3 gneg chr15 78300000 81700000 q25.1 gpos50 chr15 81700000 85200000 q25.2 gneg chr15 85200000 89100000 q25.3 gpos50 chr15 89100000 94300000 q26.1 gneg chr15 94300000 98500000 q26.2 gpos50 chr15 98500000 102531392 q26.3 gneg chr16 0 7900000 p13.3 gneg chr16 7900000 10500000 p13.2 gpos50 chr16 10500000 12600000 p13.13 gneg chr16 12600000 14800000 p13.12 gpos50 chr16 14800000 16800000 p13.11 gneg chr16 16800000 21200000 p12.3 gpos50 chr16 21200000 24200000 p12.2 gneg chr16 24200000 28100000 p12.1 gpos50 chr16 28100000 34600000 p11.2 gneg chr16 34600000 36600000 p11.1 acen chr16 36600000 38600000 q11.1 acen chr16 38600000 47000000 q11.2 gvar chr16 47000000 52600000 q12.1 gneg chr16 52600000 56700000 q12.2 gpos50 chr16 56700000 57400000 q13 gneg chr16 57400000 66700000 q21 gpos100 chr16 66700000 70800000 q22.1 gneg chr16 70800000 72900000 q22.2 gpos50 chr16 72900000 74100000 q22.3 gneg chr16 74100000 79200000 q23.1 gpos75 chr16 79200000 81700000 q23.2 gneg chr16 81700000 84200000 q23.3 gpos50 chr16 84200000 87100000 q24.1 gneg chr16 87100000 88700000 q24.2 gpos25 chr16 88700000 90354753 q24.3 gneg chr17 0 3300000 p13.3 gneg chr17 3300000 6500000 p13.2 gpos50 chr17 6500000 10700000 p13.1 gneg chr17 10700000 16000000 p12 gpos75 chr17 16000000 22200000 p11.2 gneg chr17 22200000 24000000 p11.1 acen chr17 24000000 25800000 q11.1 acen chr17 25800000 31800000 q11.2 gneg chr17 31800000 38100000 q12 gpos50 chr17 38100000 38400000 q21.1 gneg chr17 38400000 40900000 q21.2 gpos25 chr17 40900000 44900000 q21.31 gneg chr17 44900000 47400000 q21.32 gpos25 chr17 47400000 50200000 q21.33 gneg chr17 50200000 57600000 q22 gpos75 chr17 57600000 58300000 q23.1 gneg chr17 58300000 61100000 q23.2 gpos75 chr17 61100000 62600000 q23.3 gneg chr17 62600000 64200000 q24.1 gpos50 chr17 64200000 67100000 q24.2 gneg chr17 67100000 70900000 q24.3 gpos75 chr17 70900000 74800000 q25.1 gneg chr17 74800000 75300000 q25.2 gpos25 chr17 75300000 81195210 q25.3 gneg chr18 0 2900000 p11.32 gneg chr18 2900000 7100000 p11.31 gpos50 chr18 7100000 8500000 p11.23 gneg chr18 8500000 10900000 p11.22 gpos25 chr18 10900000 15400000 p11.21 gneg chr18 15400000 17200000 p11.1 acen chr18 17200000 19000000 q11.1 acen chr18 19000000 25000000 q11.2 gneg chr18 25000000 32700000 q12.1 gpos100 chr18 32700000 37200000 q12.2 gneg chr18 37200000 43500000 q12.3 gpos75 chr18 43500000 48200000 q21.1 gneg chr18 48200000 53800000 q21.2 gpos75 chr18 53800000 56200000 q21.31 gneg chr18 56200000 59000000 q21.32 gpos50 chr18 59000000 61600000 q21.33 gneg chr18 61600000 66800000 q22.1 gpos100 chr18 66800000 68700000 q22.2 gneg chr18 68700000 73100000 q22.3 gpos25 chr18 73100000 78077248 q23 gneg chr19 0 6900000 p13.3 gneg chr19 6900000 13900000 p13.2 gpos25 chr19 13900000 14000000 p13.13 gneg chr19 14000000 16300000 p13.12 gpos25 chr19 16300000 20000000 p13.11 gneg chr19 20000000 24400000 p12 gvar chr19 24400000 26500000 p11 acen chr19 26500000 28600000 q11 acen chr19 28600000 32400000 q12 gvar chr19 32400000 35500000 q13.11 gneg chr19 35500000 38300000 q13.12 gpos25 chr19 38300000 38700000 q13.13 gneg chr19 38700000 43400000 q13.2 gpos25 chr19 43400000 45200000 q13.31 gneg chr19 45200000 48000000 q13.32 gpos25 chr19 48000000 51400000 q13.33 gneg chr19 51400000 53600000 q13.41 gpos25 chr19 53600000 56300000 q13.42 gneg chr19 56300000 59128983 q13.43 gpos25 chr20 0 5100000 p13 gneg chr20 5100000 9200000 p12.3 gpos75 chr20 9200000 12100000 p12.2 gneg chr20 12100000 17900000 p12.1 gpos75 chr20 17900000 21300000 p11.23 gneg chr20 21300000 22300000 p11.22 gpos25 chr20 22300000 25600000 p11.21 gneg chr20 25600000 27500000 p11.1 acen chr20 27500000 29400000 q11.1 acen chr20 29400000 32100000 q11.21 gneg chr20 32100000 34400000 q11.22 gpos25 chr20 34400000 37600000 q11.23 gneg chr20 37600000 41700000 q12 gpos75 chr20 41700000 42100000 q13.11 gneg chr20 42100000 46400000 q13.12 gpos25 chr20 46400000 49800000 q13.13 gneg chr20 49800000 55000000 q13.2 gpos75 chr20 55000000 56500000 q13.31 gneg chr20 56500000 58400000 q13.32 gpos50 chr20 58400000 63025520 q13.33 gneg chr21 0 2800000 p13 gvar chr21 2800000 6800000 p12 stalk chr21 6800000 10900000 p11.2 gvar chr21 10900000 13200000 p11.1 acen chr21 13200000 14300000 q11.1 acen chr21 14300000 16400000 q11.2 gneg chr21 16400000 24000000 q21.1 gpos100 chr21 24000000 26800000 q21.2 gneg chr21 26800000 31500000 q21.3 gpos75 chr21 31500000 35800000 q22.11 gneg chr21 35800000 37800000 q22.12 gpos50 chr21 37800000 39700000 q22.13 gneg chr21 39700000 42600000 q22.2 gpos50 chr21 42600000 48129895 q22.3 gneg chr22 0 3800000 p13 gvar chr22 3800000 8300000 p12 stalk chr22 8300000 12200000 p11.2 gvar chr22 12200000 14700000 p11.1 acen chr22 14700000 17900000 q11.1 acen chr22 17900000 22200000 q11.21 gneg chr22 22200000 23500000 q11.22 gpos25 chr22 23500000 25900000 q11.23 gneg chr22 25900000 29600000 q12.1 gpos50 chr22 29600000 32200000 q12.2 gneg chr22 32200000 37600000 q12.3 gpos50 chr22 37600000 41000000 q13.1 gneg chr22 41000000 44200000 q13.2 gpos50 chr22 44200000 48400000 q13.31 gneg chr22 48400000 49400000 q13.32 gpos50 chr22 49400000 51304566 q13.33 gneg chrX 0 4300000 p22.33 gneg chrX 4300000 6000000 p22.32 gpos50 chrX 6000000 9500000 p22.31 gneg chrX 9500000 17100000 p22.2 gpos50 chrX 17100000 19300000 p22.13 gneg chrX 19300000 21900000 p22.12 gpos50 chrX 21900000 24900000 p22.11 gneg chrX 24900000 29300000 p21.3 gpos100 chrX 29300000 31500000 p21.2 gneg chrX 31500000 37600000 p21.1 gpos100 chrX 37600000 42400000 p11.4 gneg chrX 42400000 46400000 p11.3 gpos75 chrX 46400000 49800000 p11.23 gneg chrX 49800000 54800000 p11.22 gpos25 chrX 54800000 58100000 p11.21 gneg chrX 58100000 60600000 p11.1 acen chrX 60600000 63000000 q11.1 acen chrX 63000000 64600000 q11.2 gneg chrX 64600000 67800000 q12 gpos50 chrX 67800000 71800000 q13.1 gneg chrX 71800000 73900000 q13.2 gpos50 chrX 73900000 76000000 q13.3 gneg chrX 76000000 84600000 q21.1 gpos100 chrX 84600000 86200000 q21.2 gneg chrX 86200000 91800000 q21.31 gpos100 chrX 91800000 93500000 q21.32 gneg chrX 93500000 98300000 q21.33 gpos75 chrX 98300000 102600000 q22.1 gneg chrX 102600000 103700000 q22.2 gpos50 chrX 103700000 108700000 q22.3 gneg chrX 108700000 116500000 q23 gpos75 chrX 116500000 120900000 q24 gneg chrX 120900000 128700000 q25 gpos100 chrX 128700000 130400000 q26.1 gneg chrX 130400000 133600000 q26.2 gpos25 chrX 133600000 138000000 q26.3 gneg chrX 138000000 140300000 q27.1 gpos75 chrX 140300000 142100000 q27.2 gneg chrX 142100000 147100000 q27.3 gpos100 chrX 147100000 155270560 q28 gneg chrY 0 2500000 p11.32 gneg chrY 2500000 3000000 p11.31 gpos50 chrY 3000000 11600000 p11.2 gneg chrY 11600000 12500000 p11.1 acen chrY 12500000 13400000 q11.1 acen chrY 13400000 15100000 q11.21 gneg chrY 15100000 19800000 q11.221 gpos50 chrY 19800000 22100000 q11.222 gneg chrY 22100000 26200000 q11.223 gpos50 chrY 26200000 28800000 q11.23 gneg chrY 28800000 59373566 q12 gvar open2c-bioframe-4fe9b25/bioframe/io/data/hg19.seqinfo.tsv000066400000000000000000000153411477525772300232100ustar00rootroot00000000000000name length role molecule unit aliases chr1 249250621 assembled chr1 primary 1,CM000663.1,NC_000001.10 chr2 243199373 assembled chr2 primary 2,CM000664.1,NC_000002.11 chr3 198022430 assembled chr3 primary 3,CM000665.1,NC_000003.11 chr4 191154276 assembled chr4 primary 4,CM000666.1,NC_000004.11 chr5 180915260 assembled chr5 primary 5,CM000667.1,NC_000005.9 chr6 171115067 assembled chr6 primary 6,CM000668.1,NC_000006.11 chr7 159138663 assembled chr7 primary 7,CM000669.1,NC_000007.13 chr8 146364022 assembled chr8 primary 8,CM000670.1,NC_000008.10 chr9 141213431 assembled chr9 primary 9,CM000671.1,NC_000009.11 chr10 135534747 assembled chr10 primary 10,CM000672.1,NC_000010.10 chr11 135006516 assembled chr11 primary 11,CM000673.1,NC_000011.9 chr12 133851895 assembled chr12 primary 12,CM000674.1,NC_000012.11 chr13 115169878 assembled chr13 primary 13,CM000675.1,NC_000013.10 chr14 107349540 assembled chr14 primary 14,CM000676.1,NC_000014.8 chr15 102531392 assembled chr15 primary 15,CM000677.1,NC_000015.9 chr16 90354753 assembled chr16 primary 16,CM000678.1,NC_000016.9 chr17 81195210 assembled chr17 primary 17,CM000679.1,NC_000017.10 chr18 78077248 assembled chr18 primary 18,CM000680.1,NC_000018.9 chr19 59128983 assembled chr19 primary 19,CM000681.1,NC_000019.9 chr20 63025520 assembled chr20 primary 20,CM000682.1,NC_000020.10 chr21 48129895 assembled chr21 primary 21,CM000683.1,NC_000021.8 chr22 51304566 assembled chr22 primary 22,CM000684.1,NC_000022.10 chrX 155270560 assembled chrX primary X,CM000685.1,NC_000023.10 chrY 59373566 assembled chrY primary Y,CM000686.1,NC_000024.9 chrM 16571 assembled chrM non-nuclear NC_001807.4 chrMT 16569 assembled chrMT non-nuclear-revised MT,J01415.2,NC_012920.1 chr1_gl000191_random 106433 unlocalized chr1 primary GL000191.1,HSCHR1_RANDOM_CTG5,NT_113878.1 chr1_gl000192_random 547496 unlocalized chr1 primary GL000192.1,HSCHR1_RANDOM_CTG12,NT_167207.1 chr4_gl000193_random 189789 unlocalized chr4 primary GL000193.1,HSCHR4_RANDOM_CTG2,NT_113885.1 chr4_gl000194_random 191469 unlocalized chr4 primary GL000194.1,HSCHR4_RANDOM_CTG3,NT_113888.1 chr7_gl000195_random 182896 unlocalized chr7 primary GL000195.1,HSCHR7_RANDOM_CTG1,NT_113901.1 chr8_gl000196_random 38914 unlocalized chr8 primary GL000196.1,HSCHR8_RANDOM_CTG1,NT_113909.1 chr8_gl000197_random 37175 unlocalized chr8 primary GL000197.1,HSCHR8_RANDOM_CTG4,NT_113907.1 chr9_gl000198_random 90085 unlocalized chr9 primary GL000198.1,HSCHR9_RANDOM_CTG1,NT_113914.1 chr9_gl000199_random 169874 unlocalized chr9 primary GL000199.1,HSCHR9_RANDOM_CTG2,NT_113916.2 chr9_gl000200_random 187035 unlocalized chr9 primary GL000200.1,HSCHR9_RANDOM_CTG4,NT_113915.1 chr9_gl000201_random 36148 unlocalized chr9 primary GL000201.1,HSCHR9_RANDOM_CTG5,NT_113911.1 chr11_gl000202_random 40103 unlocalized chr11 primary GL000202.1,HSCHR11_RANDOM_CTG2,NT_113921.2 chr17_gl000203_random 37498 unlocalized chr17 primary GL000203.1,HSCHR17_RANDOM_CTG1,NT_113941.1 chr17_gl000204_random 81310 unlocalized chr17 primary GL000204.1,HSCHR17_RANDOM_CTG2,NT_113943.1 chr17_gl000205_random 174588 unlocalized chr17 primary GL000205.1,HSCHR17_RANDOM_CTG3,NT_113930.1 chr17_gl000206_random 41001 unlocalized chr17 primary GL000206.1,HSCHR17_RANDOM_CTG4,NT_113945.1 chr18_gl000207_random 4262 unlocalized chr18 primary GL000207.1,HSCHR18_RANDOM_CTG1,NT_113947.1 chr19_gl000208_random 92689 unlocalized chr19 primary GL000208.1,HSCHR19_RANDOM_CTG1,NT_113948.1 chr19_gl000209_random 159169 unlocalized chr19 primary GL000209.1,HSCHR19_RANDOM_CTG2,NT_113949.1 chr21_gl000210_random 27682 unlocalized chr21 primary GL000210.1,HSCHR21_RANDOM_CTG9,NT_113950.2 chrUn_gl000211 166566 unplaced primary GL000211.1,HSCHRUN_RANDOM_CTG1,NT_113961.1 chrUn_gl000212 186858 unplaced primary GL000212.1,HSCHRUN_RANDOM_CTG2,NT_113923.1 chrUn_gl000213 164239 unplaced primary GL000213.1,HSCHRUN_RANDOM_CTG3,NT_167208.1 chrUn_gl000214 137718 unplaced primary GL000214.1,HSCHRUN_RANDOM_CTG4,NT_167209.1 chrUn_gl000215 172545 unplaced primary GL000215.1,HSCHRUN_RANDOM_CTG5,NT_167210.1 chrUn_gl000216 172294 unplaced primary GL000216.1,HSCHRUN_RANDOM_CTG6,NT_167211.1 chrUn_gl000217 172149 unplaced primary GL000217.1,HSCHRUN_RANDOM_CTG7,NT_167212.1 chrUn_gl000218 161147 unplaced primary GL000218.1,HSCHRUN_RANDOM_CTG9,NT_113889.1 chrUn_gl000219 179198 unplaced primary GL000219.1,HSCHRUN_RANDOM_CTG10,NT_167213.1 chrUn_gl000220 161802 unplaced primary GL000220.1,HSCHRUN_RANDOM_CTG11,NT_167214.1 chrUn_gl000221 155397 unplaced primary GL000221.1,HSCHRUN_RANDOM_CTG13,NT_167215.1 chrUn_gl000222 186861 unplaced primary GL000222.1,HSCHRUN_RANDOM_CTG14,NT_167216.1 chrUn_gl000223 180455 unplaced primary GL000223.1,HSCHRUN_RANDOM_CTG15,NT_167217.1 chrUn_gl000224 179693 unplaced primary GL000224.1,HSCHRUN_RANDOM_CTG16,NT_167218.1 chrUn_gl000225 211173 unplaced primary GL000225.1,HSCHRUN_RANDOM_CTG17,NT_167219.1 chrUn_gl000226 15008 unplaced primary GL000226.1,HSCHRUN_RANDOM_CTG19,NT_167220.1 chrUn_gl000227 128374 unplaced primary GL000227.1,HSCHRUN_RANDOM_CTG20,NT_167221.1 chrUn_gl000228 129120 unplaced primary GL000228.1,HSCHRUN_RANDOM_CTG21,NT_167222.1 chrUn_gl000229 19913 unplaced primary GL000229.1,HSCHRUN_RANDOM_CTG22,NT_167223.1 chrUn_gl000230 43691 unplaced primary GL000230.1,HSCHRUN_RANDOM_CTG23,NT_167224.1 chrUn_gl000231 27386 unplaced primary GL000231.1,HSCHRUN_RANDOM_CTG24,NT_167225.1 chrUn_gl000232 40652 unplaced primary GL000232.1,HSCHRUN_RANDOM_CTG25,NT_167226.1 chrUn_gl000233 45941 unplaced primary GL000233.1,HSCHRUN_RANDOM_CTG26,NT_167227.1 chrUn_gl000234 40531 unplaced primary GL000234.1,HSCHRUN_RANDOM_CTG27,NT_167228.1 chrUn_gl000235 34474 unplaced primary GL000235.1,HSCHRUN_RANDOM_CTG28,NT_167229.1 chrUn_gl000236 41934 unplaced primary GL000236.1,HSCHRUN_RANDOM_CTG29,NT_167230.1 chrUn_gl000237 45867 unplaced primary GL000237.1,HSCHRUN_RANDOM_CTG30,NT_167231.1 chrUn_gl000238 39939 unplaced primary GL000238.1,HSCHRUN_RANDOM_CTG31,NT_167232.1 chrUn_gl000239 33824 unplaced primary GL000239.1,HSCHRUN_RANDOM_CTG32,NT_167233.1 chrUn_gl000240 41933 unplaced primary GL000240.1,HSCHRUN_RANDOM_CTG33,NT_167234.1 chrUn_gl000241 42152 unplaced primary GL000241.1,HSCHRUN_RANDOM_CTG34,NT_167235.1 chrUn_gl000242 43523 unplaced primary GL000242.1,HSCHRUN_RANDOM_CTG35,NT_167236.1 chrUn_gl000243 43341 unplaced primary GL000243.1,HSCHRUN_RANDOM_CTG36,NT_167237.1 chrUn_gl000244 39929 unplaced primary GL000244.1,HSCHRUN_RANDOM_CTG37,NT_167238.1 chrUn_gl000245 36651 unplaced primary GL000245.1,HSCHRUN_RANDOM_CTG38,NT_167239.1 chrUn_gl000246 38154 unplaced primary GL000246.1,HSCHRUN_RANDOM_CTG39,NT_167240.1 chrUn_gl000247 36422 unplaced primary GL000247.1,HSCHRUN_RANDOM_CTG40,NT_167241.1 chrUn_gl000248 39786 unplaced primary GL000248.1,HSCHRUN_RANDOM_CTG41,NT_167242.1 chrUn_gl000249 38502 unplaced primary GL000249.1,HSCHRUN_RANDOM_CTG42,NT_167243.1 open2c-bioframe-4fe9b25/bioframe/io/data/hg38.cytoband.tsv000066400000000000000000000740671477525772300233620ustar00rootroot00000000000000chrom start end band stain chr1 0 2300000 p36.33 gneg chr1 2300000 5300000 p36.32 gpos25 chr1 5300000 7100000 p36.31 gneg chr1 7100000 9100000 p36.23 gpos25 chr1 9100000 12500000 p36.22 gneg chr1 12500000 15900000 p36.21 gpos50 chr1 15900000 20100000 p36.13 gneg chr1 20100000 23600000 p36.12 gpos25 chr1 23600000 27600000 p36.11 gneg chr1 27600000 29900000 p35.3 gpos25 chr1 29900000 32300000 p35.2 gneg chr1 32300000 34300000 p35.1 gpos25 chr1 34300000 39600000 p34.3 gneg chr1 39600000 43700000 p34.2 gpos25 chr1 43700000 46300000 p34.1 gneg chr1 46300000 50200000 p33 gpos75 chr1 50200000 55600000 p32.3 gneg chr1 55600000 58500000 p32.2 gpos50 chr1 58500000 60800000 p32.1 gneg chr1 60800000 68500000 p31.3 gpos50 chr1 68500000 69300000 p31.2 gneg chr1 69300000 84400000 p31.1 gpos100 chr1 84400000 87900000 p22.3 gneg chr1 87900000 91500000 p22.2 gpos75 chr1 91500000 94300000 p22.1 gneg chr1 94300000 99300000 p21.3 gpos75 chr1 99300000 101800000 p21.2 gneg chr1 101800000 106700000 p21.1 gpos100 chr1 106700000 111200000 p13.3 gneg chr1 111200000 115500000 p13.2 gpos50 chr1 115500000 117200000 p13.1 gneg chr1 117200000 120400000 p12 gpos50 chr1 120400000 121700000 p11.2 gneg chr1 121700000 123400000 p11.1 acen chr1 123400000 125100000 q11 acen chr1 125100000 143200000 q12 gvar chr1 143200000 147500000 q21.1 gneg chr1 147500000 150600000 q21.2 gpos50 chr1 150600000 155100000 q21.3 gneg chr1 155100000 156600000 q22 gpos50 chr1 156600000 159100000 q23.1 gneg chr1 159100000 160500000 q23.2 gpos50 chr1 160500000 165500000 q23.3 gneg chr1 165500000 167200000 q24.1 gpos50 chr1 167200000 170900000 q24.2 gneg chr1 170900000 173000000 q24.3 gpos75 chr1 173000000 176100000 q25.1 gneg chr1 176100000 180300000 q25.2 gpos50 chr1 180300000 185800000 q25.3 gneg chr1 185800000 190800000 q31.1 gpos100 chr1 190800000 193800000 q31.2 gneg chr1 193800000 198700000 q31.3 gpos100 chr1 198700000 207100000 q32.1 gneg chr1 207100000 211300000 q32.2 gpos25 chr1 211300000 214400000 q32.3 gneg chr1 214400000 223900000 q41 gpos100 chr1 223900000 224400000 q42.11 gneg chr1 224400000 226800000 q42.12 gpos25 chr1 226800000 230500000 q42.13 gneg chr1 230500000 234600000 q42.2 gpos50 chr1 234600000 236400000 q42.3 gneg chr1 236400000 243500000 q43 gpos75 chr1 243500000 248956422 q44 gneg chr2 0 4400000 p25.3 gneg chr2 4400000 6900000 p25.2 gpos50 chr2 6900000 12000000 p25.1 gneg chr2 12000000 16500000 p24.3 gpos75 chr2 16500000 19000000 p24.2 gneg chr2 19000000 23800000 p24.1 gpos75 chr2 23800000 27700000 p23.3 gneg chr2 27700000 29800000 p23.2 gpos25 chr2 29800000 31800000 p23.1 gneg chr2 31800000 36300000 p22.3 gpos75 chr2 36300000 38300000 p22.2 gneg chr2 38300000 41500000 p22.1 gpos50 chr2 41500000 47500000 p21 gneg chr2 47500000 52600000 p16.3 gpos100 chr2 52600000 54700000 p16.2 gneg chr2 54700000 61000000 p16.1 gpos100 chr2 61000000 63900000 p15 gneg chr2 63900000 68400000 p14 gpos50 chr2 68400000 71300000 p13.3 gneg chr2 71300000 73300000 p13.2 gpos50 chr2 73300000 74800000 p13.1 gneg chr2 74800000 83100000 p12 gpos100 chr2 83100000 91800000 p11.2 gneg chr2 91800000 93900000 p11.1 acen chr2 93900000 96000000 q11.1 acen chr2 96000000 102100000 q11.2 gneg chr2 102100000 105300000 q12.1 gpos50 chr2 105300000 106700000 q12.2 gneg chr2 106700000 108700000 q12.3 gpos25 chr2 108700000 112200000 q13 gneg chr2 112200000 118100000 q14.1 gpos50 chr2 118100000 121600000 q14.2 gneg chr2 121600000 129100000 q14.3 gpos50 chr2 129100000 131700000 q21.1 gneg chr2 131700000 134300000 q21.2 gpos25 chr2 134300000 136100000 q21.3 gneg chr2 136100000 141500000 q22.1 gpos100 chr2 141500000 143400000 q22.2 gneg chr2 143400000 147900000 q22.3 gpos100 chr2 147900000 149000000 q23.1 gneg chr2 149000000 149600000 q23.2 gpos25 chr2 149600000 154000000 q23.3 gneg chr2 154000000 158900000 q24.1 gpos75 chr2 158900000 162900000 q24.2 gneg chr2 162900000 168900000 q24.3 gpos75 chr2 168900000 177100000 q31.1 gneg chr2 177100000 179700000 q31.2 gpos50 chr2 179700000 182100000 q31.3 gneg chr2 182100000 188500000 q32.1 gpos75 chr2 188500000 191100000 q32.2 gneg chr2 191100000 196600000 q32.3 gpos75 chr2 196600000 202500000 q33.1 gneg chr2 202500000 204100000 q33.2 gpos50 chr2 204100000 208200000 q33.3 gneg chr2 208200000 214500000 q34 gpos100 chr2 214500000 220700000 q35 gneg chr2 220700000 224300000 q36.1 gpos75 chr2 224300000 225200000 q36.2 gneg chr2 225200000 230100000 q36.3 gpos100 chr2 230100000 234700000 q37.1 gneg chr2 234700000 236400000 q37.2 gpos50 chr2 236400000 242193529 q37.3 gneg chr3 0 2800000 p26.3 gpos50 chr3 2800000 4000000 p26.2 gneg chr3 4000000 8100000 p26.1 gpos50 chr3 8100000 11600000 p25.3 gneg chr3 11600000 13200000 p25.2 gpos25 chr3 13200000 16300000 p25.1 gneg chr3 16300000 23800000 p24.3 gpos100 chr3 23800000 26300000 p24.2 gneg chr3 26300000 30800000 p24.1 gpos75 chr3 30800000 32000000 p23 gneg chr3 32000000 36400000 p22.3 gpos50 chr3 36400000 39300000 p22.2 gneg chr3 39300000 43600000 p22.1 gpos75 chr3 43600000 44100000 p21.33 gneg chr3 44100000 44200000 p21.32 gpos50 chr3 44200000 50600000 p21.31 gneg chr3 50600000 52300000 p21.2 gpos25 chr3 52300000 54400000 p21.1 gneg chr3 54400000 58600000 p14.3 gpos50 chr3 58600000 63800000 p14.2 gneg chr3 63800000 69700000 p14.1 gpos50 chr3 69700000 74100000 p13 gneg chr3 74100000 79800000 p12.3 gpos75 chr3 79800000 83500000 p12.2 gneg chr3 83500000 87100000 p12.1 gpos75 chr3 87100000 87800000 p11.2 gneg chr3 87800000 90900000 p11.1 acen chr3 90900000 94000000 q11.1 acen chr3 94000000 98600000 q11.2 gvar chr3 98600000 100300000 q12.1 gneg chr3 100300000 101200000 q12.2 gpos25 chr3 101200000 103100000 q12.3 gneg chr3 103100000 106500000 q13.11 gpos75 chr3 106500000 108200000 q13.12 gneg chr3 108200000 111600000 q13.13 gpos50 chr3 111600000 113700000 q13.2 gneg chr3 113700000 117600000 q13.31 gpos75 chr3 117600000 119300000 q13.32 gneg chr3 119300000 122200000 q13.33 gpos75 chr3 122200000 124100000 q21.1 gneg chr3 124100000 126100000 q21.2 gpos25 chr3 126100000 129500000 q21.3 gneg chr3 129500000 134000000 q22.1 gpos25 chr3 134000000 136000000 q22.2 gneg chr3 136000000 139000000 q22.3 gpos25 chr3 139000000 143100000 q23 gneg chr3 143100000 149200000 q24 gpos100 chr3 149200000 152300000 q25.1 gneg chr3 152300000 155300000 q25.2 gpos50 chr3 155300000 157300000 q25.31 gneg chr3 157300000 159300000 q25.32 gpos50 chr3 159300000 161000000 q25.33 gneg chr3 161000000 167900000 q26.1 gpos100 chr3 167900000 171200000 q26.2 gneg chr3 171200000 176000000 q26.31 gpos75 chr3 176000000 179300000 q26.32 gneg chr3 179300000 183000000 q26.33 gpos75 chr3 183000000 184800000 q27.1 gneg chr3 184800000 186300000 q27.2 gpos25 chr3 186300000 188200000 q27.3 gneg chr3 188200000 192600000 q28 gpos75 chr3 192600000 198295559 q29 gneg chr4 0 4500000 p16.3 gneg chr4 4500000 6000000 p16.2 gpos25 chr4 6000000 11300000 p16.1 gneg chr4 11300000 15000000 p15.33 gpos50 chr4 15000000 17700000 p15.32 gneg chr4 17700000 21300000 p15.31 gpos75 chr4 21300000 27700000 p15.2 gneg chr4 27700000 35800000 p15.1 gpos100 chr4 35800000 41200000 p14 gneg chr4 41200000 44600000 p13 gpos50 chr4 44600000 48200000 p12 gneg chr4 48200000 50000000 p11 acen chr4 50000000 51800000 q11 acen chr4 51800000 58500000 q12 gneg chr4 58500000 65500000 q13.1 gpos100 chr4 65500000 69400000 q13.2 gneg chr4 69400000 75300000 q13.3 gpos75 chr4 75300000 78000000 q21.1 gneg chr4 78000000 81500000 q21.21 gpos50 chr4 81500000 83200000 q21.22 gneg chr4 83200000 86000000 q21.23 gpos25 chr4 86000000 87100000 q21.3 gneg chr4 87100000 92800000 q22.1 gpos75 chr4 92800000 94200000 q22.2 gneg chr4 94200000 97900000 q22.3 gpos75 chr4 97900000 100100000 q23 gneg chr4 100100000 106700000 q24 gpos50 chr4 106700000 113200000 q25 gneg chr4 113200000 119900000 q26 gpos75 chr4 119900000 122800000 q27 gneg chr4 122800000 127900000 q28.1 gpos50 chr4 127900000 130100000 q28.2 gneg chr4 130100000 138500000 q28.3 gpos100 chr4 138500000 140600000 q31.1 gneg chr4 140600000 145900000 q31.21 gpos25 chr4 145900000 147500000 q31.22 gneg chr4 147500000 150200000 q31.23 gpos25 chr4 150200000 154600000 q31.3 gneg chr4 154600000 160800000 q32.1 gpos100 chr4 160800000 163600000 q32.2 gneg chr4 163600000 169200000 q32.3 gpos100 chr4 169200000 171000000 q33 gneg chr4 171000000 175400000 q34.1 gpos75 chr4 175400000 176600000 q34.2 gneg chr4 176600000 182300000 q34.3 gpos100 chr4 182300000 186200000 q35.1 gneg chr4 186200000 190214555 q35.2 gpos25 chr5 0 4400000 p15.33 gneg chr5 4400000 6300000 p15.32 gpos25 chr5 6300000 9900000 p15.31 gneg chr5 9900000 15000000 p15.2 gpos50 chr5 15000000 18400000 p15.1 gneg chr5 18400000 23300000 p14.3 gpos100 chr5 23300000 24600000 p14.2 gneg chr5 24600000 28900000 p14.1 gpos100 chr5 28900000 33800000 p13.3 gneg chr5 33800000 38400000 p13.2 gpos25 chr5 38400000 42500000 p13.1 gneg chr5 42500000 46100000 p12 gpos50 chr5 46100000 48800000 p11 acen chr5 48800000 51400000 q11.1 acen chr5 51400000 59600000 q11.2 gneg chr5 59600000 63600000 q12.1 gpos75 chr5 63600000 63900000 q12.2 gneg chr5 63900000 67400000 q12.3 gpos75 chr5 67400000 69100000 q13.1 gneg chr5 69100000 74000000 q13.2 gpos50 chr5 74000000 77600000 q13.3 gneg chr5 77600000 82100000 q14.1 gpos50 chr5 82100000 83500000 q14.2 gneg chr5 83500000 93000000 q14.3 gpos100 chr5 93000000 98900000 q15 gneg chr5 98900000 103400000 q21.1 gpos100 chr5 103400000 105100000 q21.2 gneg chr5 105100000 110200000 q21.3 gpos100 chr5 110200000 112200000 q22.1 gneg chr5 112200000 113800000 q22.2 gpos50 chr5 113800000 115900000 q22.3 gneg chr5 115900000 122100000 q23.1 gpos100 chr5 122100000 127900000 q23.2 gneg chr5 127900000 131200000 q23.3 gpos100 chr5 131200000 136900000 q31.1 gneg chr5 136900000 140100000 q31.2 gpos25 chr5 140100000 145100000 q31.3 gneg chr5 145100000 150400000 q32 gpos75 chr5 150400000 153300000 q33.1 gneg chr5 153300000 156300000 q33.2 gpos50 chr5 156300000 160500000 q33.3 gneg chr5 160500000 169000000 q34 gpos100 chr5 169000000 173300000 q35.1 gneg chr5 173300000 177100000 q35.2 gpos25 chr5 177100000 181538259 q35.3 gneg chr6 0 2300000 p25.3 gneg chr6 2300000 4200000 p25.2 gpos25 chr6 4200000 7100000 p25.1 gneg chr6 7100000 10600000 p24.3 gpos50 chr6 10600000 11600000 p24.2 gneg chr6 11600000 13400000 p24.1 gpos25 chr6 13400000 15200000 p23 gneg chr6 15200000 25200000 p22.3 gpos75 chr6 25200000 27100000 p22.2 gneg chr6 27100000 30500000 p22.1 gpos50 chr6 30500000 32100000 p21.33 gneg chr6 32100000 33500000 p21.32 gpos25 chr6 33500000 36600000 p21.31 gneg chr6 36600000 40500000 p21.2 gpos25 chr6 40500000 46200000 p21.1 gneg chr6 46200000 51800000 p12.3 gpos100 chr6 51800000 53000000 p12.2 gneg chr6 53000000 57200000 p12.1 gpos100 chr6 57200000 58500000 p11.2 gneg chr6 58500000 59800000 p11.1 acen chr6 59800000 62600000 q11.1 acen chr6 62600000 62700000 q11.2 gneg chr6 62700000 69200000 q12 gpos100 chr6 69200000 75200000 q13 gneg chr6 75200000 83200000 q14.1 gpos50 chr6 83200000 84200000 q14.2 gneg chr6 84200000 87300000 q14.3 gpos50 chr6 87300000 92500000 q15 gneg chr6 92500000 98900000 q16.1 gpos100 chr6 98900000 100000000 q16.2 gneg chr6 100000000 105000000 q16.3 gpos100 chr6 105000000 114200000 q21 gneg chr6 114200000 117900000 q22.1 gpos75 chr6 117900000 118100000 q22.2 gneg chr6 118100000 125800000 q22.31 gpos100 chr6 125800000 126800000 q22.32 gneg chr6 126800000 130000000 q22.33 gpos75 chr6 130000000 130900000 q23.1 gneg chr6 130900000 134700000 q23.2 gpos50 chr6 134700000 138300000 q23.3 gneg chr6 138300000 142200000 q24.1 gpos75 chr6 142200000 145100000 q24.2 gneg chr6 145100000 148500000 q24.3 gpos75 chr6 148500000 152100000 q25.1 gneg chr6 152100000 155200000 q25.2 gpos50 chr6 155200000 160600000 q25.3 gneg chr6 160600000 164100000 q26 gpos50 chr6 164100000 170805979 q27 gneg chr7 0 2800000 p22.3 gneg chr7 2800000 4500000 p22.2 gpos25 chr7 4500000 7200000 p22.1 gneg chr7 7200000 13700000 p21.3 gpos100 chr7 13700000 16500000 p21.2 gneg chr7 16500000 20900000 p21.1 gpos100 chr7 20900000 25500000 p15.3 gneg chr7 25500000 27900000 p15.2 gpos50 chr7 27900000 28800000 p15.1 gneg chr7 28800000 34900000 p14.3 gpos75 chr7 34900000 37100000 p14.2 gneg chr7 37100000 43300000 p14.1 gpos75 chr7 43300000 45400000 p13 gneg chr7 45400000 49000000 p12.3 gpos75 chr7 49000000 50500000 p12.2 gneg chr7 50500000 53900000 p12.1 gpos75 chr7 53900000 58100000 p11.2 gneg chr7 58100000 60100000 p11.1 acen chr7 60100000 62100000 q11.1 acen chr7 62100000 67500000 q11.21 gneg chr7 67500000 72700000 q11.22 gpos50 chr7 72700000 77900000 q11.23 gneg chr7 77900000 86700000 q21.11 gpos100 chr7 86700000 88500000 q21.12 gneg chr7 88500000 91500000 q21.13 gpos75 chr7 91500000 93300000 q21.2 gneg chr7 93300000 98400000 q21.3 gpos75 chr7 98400000 104200000 q22.1 gneg chr7 104200000 104900000 q22.2 gpos50 chr7 104900000 107800000 q22.3 gneg chr7 107800000 115000000 q31.1 gpos75 chr7 115000000 117700000 q31.2 gneg chr7 117700000 121400000 q31.31 gpos75 chr7 121400000 124100000 q31.32 gneg chr7 124100000 127500000 q31.33 gpos75 chr7 127500000 129600000 q32.1 gneg chr7 129600000 130800000 q32.2 gpos25 chr7 130800000 132900000 q32.3 gneg chr7 132900000 138500000 q33 gpos50 chr7 138500000 143400000 q34 gneg chr7 143400000 148200000 q35 gpos75 chr7 148200000 152800000 q36.1 gneg chr7 152800000 155200000 q36.2 gpos25 chr7 155200000 159345973 q36.3 gneg chr8 0 2300000 p23.3 gneg chr8 2300000 6300000 p23.2 gpos75 chr8 6300000 12800000 p23.1 gneg chr8 12800000 19200000 p22 gpos100 chr8 19200000 23500000 p21.3 gneg chr8 23500000 27500000 p21.2 gpos50 chr8 27500000 29000000 p21.1 gneg chr8 29000000 36700000 p12 gpos75 chr8 36700000 38500000 p11.23 gneg chr8 38500000 39900000 p11.22 gpos25 chr8 39900000 43200000 p11.21 gneg chr8 43200000 45200000 p11.1 acen chr8 45200000 47200000 q11.1 acen chr8 47200000 51300000 q11.21 gneg chr8 51300000 51700000 q11.22 gpos75 chr8 51700000 54600000 q11.23 gneg chr8 54600000 60600000 q12.1 gpos50 chr8 60600000 61300000 q12.2 gneg chr8 61300000 65100000 q12.3 gpos50 chr8 65100000 67100000 q13.1 gneg chr8 67100000 69600000 q13.2 gpos50 chr8 69600000 72000000 q13.3 gneg chr8 72000000 74600000 q21.11 gpos100 chr8 74600000 74700000 q21.12 gneg chr8 74700000 83500000 q21.13 gpos75 chr8 83500000 85900000 q21.2 gneg chr8 85900000 92300000 q21.3 gpos100 chr8 92300000 97900000 q22.1 gneg chr8 97900000 100500000 q22.2 gpos25 chr8 100500000 105100000 q22.3 gneg chr8 105100000 109500000 q23.1 gpos75 chr8 109500000 111100000 q23.2 gneg chr8 111100000 116700000 q23.3 gpos100 chr8 116700000 118300000 q24.11 gneg chr8 118300000 121500000 q24.12 gpos50 chr8 121500000 126300000 q24.13 gneg chr8 126300000 130400000 q24.21 gpos50 chr8 130400000 135400000 q24.22 gneg chr8 135400000 138900000 q24.23 gpos75 chr8 138900000 145138636 q24.3 gneg chr9 0 2200000 p24.3 gneg chr9 2200000 4600000 p24.2 gpos25 chr9 4600000 9000000 p24.1 gneg chr9 9000000 14200000 p23 gpos75 chr9 14200000 16600000 p22.3 gneg chr9 16600000 18500000 p22.2 gpos25 chr9 18500000 19900000 p22.1 gneg chr9 19900000 25600000 p21.3 gpos100 chr9 25600000 28000000 p21.2 gneg chr9 28000000 33200000 p21.1 gpos100 chr9 33200000 36300000 p13.3 gneg chr9 36300000 37900000 p13.2 gpos25 chr9 37900000 39000000 p13.1 gneg chr9 39000000 40000000 p12 gpos50 chr9 40000000 42200000 p11.2 gneg chr9 42200000 43000000 p11.1 acen chr9 43000000 45500000 q11 acen chr9 45500000 61500000 q12 gvar chr9 61500000 65000000 q13 gneg chr9 65000000 69300000 q21.11 gpos25 chr9 69300000 71300000 q21.12 gneg chr9 71300000 76600000 q21.13 gpos50 chr9 76600000 78500000 q21.2 gneg chr9 78500000 81500000 q21.31 gpos50 chr9 81500000 84300000 q21.32 gneg chr9 84300000 87800000 q21.33 gpos50 chr9 87800000 89200000 q22.1 gneg chr9 89200000 91200000 q22.2 gpos25 chr9 91200000 93900000 q22.31 gneg chr9 93900000 96500000 q22.32 gpos25 chr9 96500000 99800000 q22.33 gneg chr9 99800000 105400000 q31.1 gpos100 chr9 105400000 108500000 q31.2 gneg chr9 108500000 112100000 q31.3 gpos25 chr9 112100000 114900000 q32 gneg chr9 114900000 119800000 q33.1 gpos75 chr9 119800000 123100000 q33.2 gneg chr9 123100000 127500000 q33.3 gpos25 chr9 127500000 130600000 q34.11 gneg chr9 130600000 131100000 q34.12 gpos25 chr9 131100000 133100000 q34.13 gneg chr9 133100000 134500000 q34.2 gpos25 chr9 134500000 138394717 q34.3 gneg chr10 0 3000000 p15.3 gneg chr10 3000000 3800000 p15.2 gpos25 chr10 3800000 6600000 p15.1 gneg chr10 6600000 12200000 p14 gpos75 chr10 12200000 17300000 p13 gneg chr10 17300000 18300000 p12.33 gpos75 chr10 18300000 18400000 p12.32 gneg chr10 18400000 22300000 p12.31 gpos75 chr10 22300000 24300000 p12.2 gneg chr10 24300000 29300000 p12.1 gpos50 chr10 29300000 31100000 p11.23 gneg chr10 31100000 34200000 p11.22 gpos25 chr10 34200000 38000000 p11.21 gneg chr10 38000000 39800000 p11.1 acen chr10 39800000 41600000 q11.1 acen chr10 41600000 45500000 q11.21 gneg chr10 45500000 48600000 q11.22 gpos25 chr10 48600000 51100000 q11.23 gneg chr10 51100000 59400000 q21.1 gpos100 chr10 59400000 62800000 q21.2 gneg chr10 62800000 68800000 q21.3 gpos100 chr10 68800000 73100000 q22.1 gneg chr10 73100000 75900000 q22.2 gpos50 chr10 75900000 80300000 q22.3 gneg chr10 80300000 86100000 q23.1 gpos100 chr10 86100000 87700000 q23.2 gneg chr10 87700000 91100000 q23.31 gpos75 chr10 91100000 92300000 q23.32 gneg chr10 92300000 95300000 q23.33 gpos50 chr10 95300000 97500000 q24.1 gneg chr10 97500000 100100000 q24.2 gpos50 chr10 100100000 101200000 q24.31 gneg chr10 101200000 103100000 q24.32 gpos25 chr10 103100000 104000000 q24.33 gneg chr10 104000000 110100000 q25.1 gpos100 chr10 110100000 113100000 q25.2 gneg chr10 113100000 117300000 q25.3 gpos75 chr10 117300000 119900000 q26.11 gneg chr10 119900000 121400000 q26.12 gpos50 chr10 121400000 125700000 q26.13 gneg chr10 125700000 128800000 q26.2 gpos50 chr10 128800000 133797422 q26.3 gneg chr11 0 2800000 p15.5 gneg chr11 2800000 11700000 p15.4 gpos50 chr11 11700000 13800000 p15.3 gneg chr11 13800000 16900000 p15.2 gpos50 chr11 16900000 22000000 p15.1 gneg chr11 22000000 26200000 p14.3 gpos100 chr11 26200000 27200000 p14.2 gneg chr11 27200000 31000000 p14.1 gpos75 chr11 31000000 36400000 p13 gneg chr11 36400000 43400000 p12 gpos100 chr11 43400000 48800000 p11.2 gneg chr11 48800000 51000000 p11.12 gpos75 chr11 51000000 53400000 p11.11 acen chr11 53400000 55800000 q11 acen chr11 55800000 60100000 q12.1 gpos75 chr11 60100000 61900000 q12.2 gneg chr11 61900000 63600000 q12.3 gpos25 chr11 63600000 66100000 q13.1 gneg chr11 66100000 68700000 q13.2 gpos25 chr11 68700000 70500000 q13.3 gneg chr11 70500000 75500000 q13.4 gpos50 chr11 75500000 77400000 q13.5 gneg chr11 77400000 85900000 q14.1 gpos100 chr11 85900000 88600000 q14.2 gneg chr11 88600000 93000000 q14.3 gpos100 chr11 93000000 97400000 q21 gneg chr11 97400000 102300000 q22.1 gpos100 chr11 102300000 103000000 q22.2 gneg chr11 103000000 110600000 q22.3 gpos100 chr11 110600000 112700000 q23.1 gneg chr11 112700000 114600000 q23.2 gpos50 chr11 114600000 121300000 q23.3 gneg chr11 121300000 124000000 q24.1 gpos50 chr11 124000000 127900000 q24.2 gneg chr11 127900000 130900000 q24.3 gpos50 chr11 130900000 135086622 q25 gneg chr12 0 3200000 p13.33 gneg chr12 3200000 5300000 p13.32 gpos25 chr12 5300000 10000000 p13.31 gneg chr12 10000000 12600000 p13.2 gpos75 chr12 12600000 14600000 p13.1 gneg chr12 14600000 19800000 p12.3 gpos100 chr12 19800000 21100000 p12.2 gneg chr12 21100000 26300000 p12.1 gpos100 chr12 26300000 27600000 p11.23 gneg chr12 27600000 30500000 p11.22 gpos50 chr12 30500000 33200000 p11.21 gneg chr12 33200000 35500000 p11.1 acen chr12 35500000 37800000 q11 acen chr12 37800000 46000000 q12 gpos100 chr12 46000000 48700000 q13.11 gneg chr12 48700000 51100000 q13.12 gpos25 chr12 51100000 54500000 q13.13 gneg chr12 54500000 56200000 q13.2 gpos25 chr12 56200000 57700000 q13.3 gneg chr12 57700000 62700000 q14.1 gpos75 chr12 62700000 64700000 q14.2 gneg chr12 64700000 67300000 q14.3 gpos50 chr12 67300000 71100000 q15 gneg chr12 71100000 75300000 q21.1 gpos75 chr12 75300000 79900000 q21.2 gneg chr12 79900000 86300000 q21.31 gpos100 chr12 86300000 88600000 q21.32 gneg chr12 88600000 92200000 q21.33 gpos100 chr12 92200000 95800000 q22 gneg chr12 95800000 101200000 q23.1 gpos75 chr12 101200000 103500000 q23.2 gneg chr12 103500000 108600000 q23.3 gpos50 chr12 108600000 111300000 q24.11 gneg chr12 111300000 111900000 q24.12 gpos25 chr12 111900000 113900000 q24.13 gneg chr12 113900000 116400000 q24.21 gpos50 chr12 116400000 117700000 q24.22 gneg chr12 117700000 120300000 q24.23 gpos50 chr12 120300000 125400000 q24.31 gneg chr12 125400000 128700000 q24.32 gpos50 chr12 128700000 133275309 q24.33 gneg chr13 0 4600000 p13 gvar chr13 4600000 10100000 p12 stalk chr13 10100000 16500000 p11.2 gvar chr13 16500000 17700000 p11.1 acen chr13 17700000 18900000 q11 acen chr13 18900000 22600000 q12.11 gneg chr13 22600000 24900000 q12.12 gpos25 chr13 24900000 27200000 q12.13 gneg chr13 27200000 28300000 q12.2 gpos25 chr13 28300000 31600000 q12.3 gneg chr13 31600000 33400000 q13.1 gpos50 chr13 33400000 34900000 q13.2 gneg chr13 34900000 39500000 q13.3 gpos75 chr13 39500000 44600000 q14.11 gneg chr13 44600000 45200000 q14.12 gpos25 chr13 45200000 46700000 q14.13 gneg chr13 46700000 50300000 q14.2 gpos50 chr13 50300000 54700000 q14.3 gneg chr13 54700000 59000000 q21.1 gpos100 chr13 59000000 61800000 q21.2 gneg chr13 61800000 65200000 q21.31 gpos75 chr13 65200000 68100000 q21.32 gneg chr13 68100000 72800000 q21.33 gpos100 chr13 72800000 74900000 q22.1 gneg chr13 74900000 76700000 q22.2 gpos50 chr13 76700000 78500000 q22.3 gneg chr13 78500000 87100000 q31.1 gpos100 chr13 87100000 89400000 q31.2 gneg chr13 89400000 94400000 q31.3 gpos100 chr13 94400000 97500000 q32.1 gneg chr13 97500000 98700000 q32.2 gpos25 chr13 98700000 101100000 q32.3 gneg chr13 101100000 104200000 q33.1 gpos100 chr13 104200000 106400000 q33.2 gneg chr13 106400000 109600000 q33.3 gpos100 chr13 109600000 114364328 q34 gneg chr14 0 3600000 p13 gvar chr14 3600000 8000000 p12 stalk chr14 8000000 16100000 p11.2 gvar chr14 16100000 17200000 p11.1 acen chr14 17200000 18200000 q11.1 acen chr14 18200000 24100000 q11.2 gneg chr14 24100000 32900000 q12 gpos100 chr14 32900000 34800000 q13.1 gneg chr14 34800000 36100000 q13.2 gpos50 chr14 36100000 37400000 q13.3 gneg chr14 37400000 43000000 q21.1 gpos100 chr14 43000000 46700000 q21.2 gneg chr14 46700000 50400000 q21.3 gpos100 chr14 50400000 53600000 q22.1 gneg chr14 53600000 55000000 q22.2 gpos25 chr14 55000000 57600000 q22.3 gneg chr14 57600000 61600000 q23.1 gpos75 chr14 61600000 64300000 q23.2 gneg chr14 64300000 67400000 q23.3 gpos50 chr14 67400000 69800000 q24.1 gneg chr14 69800000 73300000 q24.2 gpos50 chr14 73300000 78800000 q24.3 gneg chr14 78800000 83100000 q31.1 gpos100 chr14 83100000 84400000 q31.2 gneg chr14 84400000 89300000 q31.3 gpos100 chr14 89300000 91400000 q32.11 gneg chr14 91400000 94200000 q32.12 gpos25 chr14 94200000 95800000 q32.13 gneg chr14 95800000 100900000 q32.2 gpos50 chr14 100900000 102700000 q32.31 gneg chr14 102700000 103500000 q32.32 gpos50 chr14 103500000 107043718 q32.33 gneg chr15 0 4200000 p13 gvar chr15 4200000 9700000 p12 stalk chr15 9700000 17500000 p11.2 gvar chr15 17500000 19000000 p11.1 acen chr15 19000000 20500000 q11.1 acen chr15 20500000 25500000 q11.2 gneg chr15 25500000 27800000 q12 gpos50 chr15 27800000 30000000 q13.1 gneg chr15 30000000 30900000 q13.2 gpos50 chr15 30900000 33400000 q13.3 gneg chr15 33400000 39800000 q14 gpos75 chr15 39800000 42500000 q15.1 gneg chr15 42500000 43300000 q15.2 gpos25 chr15 43300000 44500000 q15.3 gneg chr15 44500000 49200000 q21.1 gpos75 chr15 49200000 52600000 q21.2 gneg chr15 52600000 58800000 q21.3 gpos75 chr15 58800000 59000000 q22.1 gneg chr15 59000000 63400000 q22.2 gpos25 chr15 63400000 66900000 q22.31 gneg chr15 66900000 67000000 q22.32 gpos25 chr15 67000000 67200000 q22.33 gneg chr15 67200000 72400000 q23 gpos25 chr15 72400000 74900000 q24.1 gneg chr15 74900000 76300000 q24.2 gpos25 chr15 76300000 78000000 q24.3 gneg chr15 78000000 81400000 q25.1 gpos50 chr15 81400000 84700000 q25.2 gneg chr15 84700000 88500000 q25.3 gpos50 chr15 88500000 93800000 q26.1 gneg chr15 93800000 98000000 q26.2 gpos50 chr15 98000000 101991189 q26.3 gneg chr16 0 7800000 p13.3 gneg chr16 7800000 10400000 p13.2 gpos50 chr16 10400000 12500000 p13.13 gneg chr16 12500000 14700000 p13.12 gpos50 chr16 14700000 16700000 p13.11 gneg chr16 16700000 21200000 p12.3 gpos50 chr16 21200000 24200000 p12.2 gneg chr16 24200000 28500000 p12.1 gpos50 chr16 28500000 35300000 p11.2 gneg chr16 35300000 36800000 p11.1 acen chr16 36800000 38400000 q11.1 acen chr16 38400000 47000000 q11.2 gvar chr16 47000000 52600000 q12.1 gneg chr16 52600000 56000000 q12.2 gpos50 chr16 56000000 57300000 q13 gneg chr16 57300000 66600000 q21 gpos100 chr16 66600000 70800000 q22.1 gneg chr16 70800000 72800000 q22.2 gpos50 chr16 72800000 74100000 q22.3 gneg chr16 74100000 79200000 q23.1 gpos75 chr16 79200000 81600000 q23.2 gneg chr16 81600000 84100000 q23.3 gpos50 chr16 84100000 87000000 q24.1 gneg chr16 87000000 88700000 q24.2 gpos25 chr16 88700000 90338345 q24.3 gneg chr17 0 3400000 p13.3 gneg chr17 3400000 6500000 p13.2 gpos50 chr17 6500000 10800000 p13.1 gneg chr17 10800000 16100000 p12 gpos75 chr17 16100000 22700000 p11.2 gneg chr17 22700000 25100000 p11.1 acen chr17 25100000 27400000 q11.1 acen chr17 27400000 33500000 q11.2 gneg chr17 33500000 39800000 q12 gpos50 chr17 39800000 40200000 q21.1 gneg chr17 40200000 42800000 q21.2 gpos25 chr17 42800000 46800000 q21.31 gneg chr17 46800000 49300000 q21.32 gpos25 chr17 49300000 52100000 q21.33 gneg chr17 52100000 59500000 q22 gpos75 chr17 59500000 60200000 q23.1 gneg chr17 60200000 63100000 q23.2 gpos75 chr17 63100000 64600000 q23.3 gneg chr17 64600000 66200000 q24.1 gpos50 chr17 66200000 69100000 q24.2 gneg chr17 69100000 72900000 q24.3 gpos75 chr17 72900000 76800000 q25.1 gneg chr17 76800000 77200000 q25.2 gpos25 chr17 77200000 83257441 q25.3 gneg chr18 0 2900000 p11.32 gneg chr18 2900000 7200000 p11.31 gpos50 chr18 7200000 8500000 p11.23 gneg chr18 8500000 10900000 p11.22 gpos25 chr18 10900000 15400000 p11.21 gneg chr18 15400000 18500000 p11.1 acen chr18 18500000 21500000 q11.1 acen chr18 21500000 27500000 q11.2 gneg chr18 27500000 35100000 q12.1 gpos100 chr18 35100000 39500000 q12.2 gneg chr18 39500000 45900000 q12.3 gpos75 chr18 45900000 50700000 q21.1 gneg chr18 50700000 56200000 q21.2 gpos75 chr18 56200000 58600000 q21.31 gneg chr18 58600000 61300000 q21.32 gpos50 chr18 61300000 63900000 q21.33 gneg chr18 63900000 69100000 q22.1 gpos100 chr18 69100000 71000000 q22.2 gneg chr18 71000000 75400000 q22.3 gpos25 chr18 75400000 80373285 q23 gneg chr19 0 6900000 p13.3 gneg chr19 6900000 12600000 p13.2 gpos25 chr19 12600000 13800000 p13.13 gneg chr19 13800000 16100000 p13.12 gpos25 chr19 16100000 19900000 p13.11 gneg chr19 19900000 24200000 p12 gvar chr19 24200000 26200000 p11 acen chr19 26200000 28100000 q11 acen chr19 28100000 31900000 q12 gvar chr19 31900000 35100000 q13.11 gneg chr19 35100000 37800000 q13.12 gpos25 chr19 37800000 38200000 q13.13 gneg chr19 38200000 42900000 q13.2 gpos25 chr19 42900000 44700000 q13.31 gneg chr19 44700000 47500000 q13.32 gpos25 chr19 47500000 50900000 q13.33 gneg chr19 50900000 53100000 q13.41 gpos25 chr19 53100000 55800000 q13.42 gneg chr19 55800000 58617616 q13.43 gpos25 chr20 0 5100000 p13 gneg chr20 5100000 9200000 p12.3 gpos75 chr20 9200000 12000000 p12.2 gneg chr20 12000000 17900000 p12.1 gpos75 chr20 17900000 21300000 p11.23 gneg chr20 21300000 22300000 p11.22 gpos25 chr20 22300000 25700000 p11.21 gneg chr20 25700000 28100000 p11.1 acen chr20 28100000 30400000 q11.1 acen chr20 30400000 33500000 q11.21 gneg chr20 33500000 35800000 q11.22 gpos25 chr20 35800000 39000000 q11.23 gneg chr20 39000000 43100000 q12 gpos75 chr20 43100000 43500000 q13.11 gneg chr20 43500000 47800000 q13.12 gpos25 chr20 47800000 51200000 q13.13 gneg chr20 51200000 56400000 q13.2 gpos75 chr20 56400000 57800000 q13.31 gneg chr20 57800000 59700000 q13.32 gpos50 chr20 59700000 64444167 q13.33 gneg chr21 0 3100000 p13 gvar chr21 3100000 7000000 p12 stalk chr21 7000000 10900000 p11.2 gvar chr21 10900000 12000000 p11.1 acen chr21 12000000 13000000 q11.1 acen chr21 13000000 15000000 q11.2 gneg chr21 15000000 22600000 q21.1 gpos100 chr21 22600000 25500000 q21.2 gneg chr21 25500000 30200000 q21.3 gpos75 chr21 30200000 34400000 q22.11 gneg chr21 34400000 36400000 q22.12 gpos50 chr21 36400000 38300000 q22.13 gneg chr21 38300000 41200000 q22.2 gpos50 chr21 41200000 46709983 q22.3 gneg chr22 0 4300000 p13 gvar chr22 4300000 9400000 p12 stalk chr22 9400000 13700000 p11.2 gvar chr22 13700000 15000000 p11.1 acen chr22 15000000 17400000 q11.1 acen chr22 17400000 21700000 q11.21 gneg chr22 21700000 23100000 q11.22 gpos25 chr22 23100000 25500000 q11.23 gneg chr22 25500000 29200000 q12.1 gpos50 chr22 29200000 31800000 q12.2 gneg chr22 31800000 37200000 q12.3 gpos50 chr22 37200000 40600000 q13.1 gneg chr22 40600000 43800000 q13.2 gpos50 chr22 43800000 48100000 q13.31 gneg chr22 48100000 49100000 q13.32 gpos50 chr22 49100000 50818468 q13.33 gneg chrX 0 4400000 p22.33 gneg chrX 4400000 6100000 p22.32 gpos50 chrX 6100000 9600000 p22.31 gneg chrX 9600000 17400000 p22.2 gpos50 chrX 17400000 19200000 p22.13 gneg chrX 19200000 21900000 p22.12 gpos50 chrX 21900000 24900000 p22.11 gneg chrX 24900000 29300000 p21.3 gpos100 chrX 29300000 31500000 p21.2 gneg chrX 31500000 37800000 p21.1 gpos100 chrX 37800000 42500000 p11.4 gneg chrX 42500000 47600000 p11.3 gpos75 chrX 47600000 50100000 p11.23 gneg chrX 50100000 54800000 p11.22 gpos25 chrX 54800000 58100000 p11.21 gneg chrX 58100000 61000000 p11.1 acen chrX 61000000 63800000 q11.1 acen chrX 63800000 65400000 q11.2 gneg chrX 65400000 68500000 q12 gpos50 chrX 68500000 73000000 q13.1 gneg chrX 73000000 74700000 q13.2 gpos50 chrX 74700000 76800000 q13.3 gneg chrX 76800000 85400000 q21.1 gpos100 chrX 85400000 87000000 q21.2 gneg chrX 87000000 92700000 q21.31 gpos100 chrX 92700000 94300000 q21.32 gneg chrX 94300000 99100000 q21.33 gpos75 chrX 99100000 103300000 q22.1 gneg chrX 103300000 104500000 q22.2 gpos50 chrX 104500000 109400000 q22.3 gneg chrX 109400000 117400000 q23 gpos75 chrX 117400000 121800000 q24 gneg chrX 121800000 129500000 q25 gpos100 chrX 129500000 131300000 q26.1 gneg chrX 131300000 134500000 q26.2 gpos25 chrX 134500000 138900000 q26.3 gneg chrX 138900000 141200000 q27.1 gpos75 chrX 141200000 143000000 q27.2 gneg chrX 143000000 148000000 q27.3 gpos100 chrX 148000000 156040895 q28 gneg chrY 0 300000 p11.32 gneg chrY 300000 600000 p11.31 gpos50 chrY 600000 10300000 p11.2 gneg chrY 10300000 10400000 p11.1 acen chrY 10400000 10600000 q11.1 acen chrY 10600000 12400000 q11.21 gneg chrY 12400000 17100000 q11.221 gpos50 chrY 17100000 19600000 q11.222 gneg chrY 19600000 23800000 q11.223 gpos50 chrY 23800000 26600000 q11.23 gneg chrY 26600000 57227415 q12 gvar open2c-bioframe-4fe9b25/bioframe/io/data/hg38.seqinfo.tsv000066400000000000000000000401651477525772300232130ustar00rootroot00000000000000name length role molecule unit aliases chr1 248956422 assembled chr1 primary 1,CM000663.2,NC_000001.11 chr2 242193529 assembled chr2 primary 2,CM000664.2,NC_000002.12 chr3 198295559 assembled chr3 primary 3,CM000665.2,NC_000003.12 chr4 190214555 assembled chr4 primary 4,CM000666.2,NC_000004.12 chr5 181538259 assembled chr5 primary 5,CM000667.2,NC_000005.10 chr6 170805979 assembled chr6 primary 6,CM000668.2,NC_000006.12 chr7 159345973 assembled chr7 primary 7,CM000669.2,NC_000007.14 chr8 145138636 assembled chr8 primary 8,CM000670.2,NC_000008.11 chr9 138394717 assembled chr9 primary 9,CM000671.2,NC_000009.12 chr10 133797422 assembled chr10 primary 10,CM000672.2,NC_000010.11 chr11 135086622 assembled chr11 primary 11,CM000673.2,NC_000011.10 chr12 133275309 assembled chr12 primary 12,CM000674.2,NC_000012.12 chr13 114364328 assembled chr13 primary 13,CM000675.2,NC_000013.11 chr14 107043718 assembled chr14 primary 14,CM000676.2,NC_000014.9 chr15 101991189 assembled chr15 primary 15,CM000677.2,NC_000015.10 chr16 90338345 assembled chr16 primary 16,CM000678.2,NC_000016.10 chr17 83257441 assembled chr17 primary 17,CM000679.2,NC_000017.11 chr18 80373285 assembled chr18 primary 18,CM000680.2,NC_000018.10 chr19 58617616 assembled chr19 primary 19,CM000681.2,NC_000019.10 chr20 64444167 assembled chr20 primary 20,CM000682.2,NC_000020.11 chr21 46709983 assembled chr21 primary 21,CM000683.2,NC_000021.9 chr22 50818468 assembled chr22 primary 22,CM000684.2,NC_000022.11 chrX 156040895 assembled chrX primary X,CM000685.2,NC_000023.11 chrY 57227415 assembled chrY primary Y,CM000686.2,NC_000024.10 chrM 16569 assembled chrM non-nuclear MT,J01415.2,NC_012920.1 chr1_KI270706v1_random 175055 unlocalized chr1 primary HSCHR1_CTG1_UNLOCALIZED,KI270706.1,NT_187361.1 chr1_KI270707v1_random 32032 unlocalized chr1 primary HSCHR1_CTG2_UNLOCALIZED,KI270707.1,NT_187362.1 chr1_KI270708v1_random 127682 unlocalized chr1 primary HSCHR1_CTG3_UNLOCALIZED,KI270708.1,NT_187363.1 chr1_KI270709v1_random 66860 unlocalized chr1 primary HSCHR1_CTG4_UNLOCALIZED,KI270709.1,NT_187364.1 chr1_KI270710v1_random 40176 unlocalized chr1 primary HSCHR1_CTG5_UNLOCALIZED,KI270710.1,NT_187365.1 chr1_KI270711v1_random 42210 unlocalized chr1 primary HSCHR1_CTG6_UNLOCALIZED,KI270711.1,NT_187366.1 chr1_KI270712v1_random 176043 unlocalized chr1 primary HSCHR1_CTG7_UNLOCALIZED,KI270712.1,NT_187367.1 chr1_KI270713v1_random 40745 unlocalized chr1 primary HSCHR1_CTG8_UNLOCALIZED,KI270713.1,NT_187368.1 chr1_KI270714v1_random 41717 unlocalized chr1 primary HSCHR1_CTG9_UNLOCALIZED,KI270714.1,NT_187369.1 chr2_KI270715v1_random 161471 unlocalized chr2 primary HSCHR2_RANDOM_CTG1,KI270715.1,NT_187370.1 chr2_KI270716v1_random 153799 unlocalized chr2 primary HSCHR2_RANDOM_CTG2,KI270716.1,NT_187371.1 chr3_GL000221v1_random 155397 unlocalized chr3 primary GL000221.1,HSCHR3UN_CTG2,NT_167215.1 chr4_GL000008v2_random 209709 unlocalized chr4 primary GL000008.2,HSCHR4_RANDOM_CTG4,NT_113793.3 chr5_GL000208v1_random 92689 unlocalized chr5 primary GL000208.1,HSCHR5_RANDOM_CTG1,NT_113948.1 chr9_KI270717v1_random 40062 unlocalized chr9 primary HSCHR9_UNLOCALIZED_CTG1,KI270717.1,NT_187372.1 chr9_KI270718v1_random 38054 unlocalized chr9 primary HSCHR9_UNLOCALIZED_CTG2,KI270718.1,NT_187373.1 chr9_KI270719v1_random 176845 unlocalized chr9 primary HSCHR9_UNLOCALIZED_CTG3,KI270719.1,NT_187374.1 chr9_KI270720v1_random 39050 unlocalized chr9 primary HSCHR9_UNLOCALIZED_CTG4,KI270720.1,NT_187375.1 chr11_KI270721v1_random 100316 unlocalized chr11 primary HSCHR11_CTG1_UNLOCALIZED,KI270721.1,NT_187376.1 chr14_GL000009v2_random 201709 unlocalized chr14 primary GL000009.2,HSCHR14_CTG1_UNLOCALIZED,NT_113796.3 chr14_GL000194v1_random 191469 unlocalized chr14 primary GL000194.1,HSCHR14_CTG4_UNLOCALIZED,NT_113888.1 chr14_GL000225v1_random 211173 unlocalized chr14 primary GL000225.1,HSCHR14_CTG2_UNLOCALIZED,NT_167219.1 chr14_KI270722v1_random 194050 unlocalized chr14 primary HSCHR14_CTG3_UNLOCALIZED,KI270722.1,NT_187377.1 chr14_KI270723v1_random 38115 unlocalized chr14 primary HSCHR14_CTG5_UNLOCALIZED,KI270723.1,NT_187378.1 chr14_KI270724v1_random 39555 unlocalized chr14 primary HSCHR14_CTG6_UNLOCALIZED,KI270724.1,NT_187379.1 chr14_KI270725v1_random 172810 unlocalized chr14 primary HSCHR14_CTG7_UNLOCALIZED,KI270725.1,NT_187380.1 chr14_KI270726v1_random 43739 unlocalized chr14 primary HSCHR14_CTG8_UNLOCALIZED,KI270726.1,NT_187381.1 chr15_KI270727v1_random 448248 unlocalized chr15 primary HSCHR15_RANDOM_CTG1,KI270727.1,NT_187382.1 chr16_KI270728v1_random 1872759 unlocalized chr16 primary HSCHR16_RANDOM_CTG1,KI270728.1,NT_187383.1 chr17_GL000205v2_random 185591 unlocalized chr17 primary GL000205.2,HSCHR17_RANDOM_CTG3,NT_113930.2 chr17_KI270729v1_random 280839 unlocalized chr17 primary HSCHR17_RANDOM_CTG4,KI270729.1,NT_187384.1 chr17_KI270730v1_random 112551 unlocalized chr17 primary HSCHR17_RANDOM_CTG5,KI270730.1,NT_187385.1 chr22_KI270731v1_random 150754 unlocalized chr22 primary HSCHR22_UNLOCALIZED_CTG1,KI270731.1,NT_187386.1 chr22_KI270732v1_random 41543 unlocalized chr22 primary HSCHR22_UNLOCALIZED_CTG2,KI270732.1,NT_187387.1 chr22_KI270733v1_random 179772 unlocalized chr22 primary HSCHR22_UNLOCALIZED_CTG3,KI270733.1,NT_187388.1 chr22_KI270734v1_random 165050 unlocalized chr22 primary HSCHR22_UNLOCALIZED_CTG4,KI270734.1,NT_187389.1 chr22_KI270735v1_random 42811 unlocalized chr22 primary HSCHR22_UNLOCALIZED_CTG5,KI270735.1,NT_187390.1 chr22_KI270736v1_random 181920 unlocalized chr22 primary HSCHR22_UNLOCALIZED_CTG6,KI270736.1,NT_187391.1 chr22_KI270737v1_random 103838 unlocalized chr22 primary HSCHR22_UNLOCALIZED_CTG7,KI270737.1,NT_187392.1 chr22_KI270738v1_random 99375 unlocalized chr22 primary HSCHR22_UNLOCALIZED_CTG8,KI270738.1,NT_187393.1 chr22_KI270739v1_random 73985 unlocalized chr22 primary HSCHR22_UNLOCALIZED_CTG9,KI270739.1,NT_187394.1 chrY_KI270740v1_random 37240 unlocalized chrY primary HSCHRY_RANDOM_CTG1,KI270740.1,NT_187395.1 chrUn_GL000195v1 182896 unplaced primary GL000195.1,HSCHRUN_RANDOM_CTG1,NT_113901.1 chrUn_GL000213v1 164239 unplaced primary GL000213.1,HSCHRUN_RANDOM_CTG2,NT_167208.1 chrUn_GL000214v1 137718 unplaced primary GL000214.1,HSCHRUN_RANDOM_CTG4,NT_167209.1 chrUn_GL000216v2 176608 unplaced primary GL000216.2,HSCHRUN_RANDOM_CTG6,NT_167211.2 chrUn_GL000218v1 161147 unplaced primary GL000218.1,HSCHRUN_RANDOM_CTG9,NT_113889.1 chrUn_GL000219v1 179198 unplaced primary GL000219.1,HSCHRUN_RANDOM_CTG10,NT_167213.1 chrUn_GL000220v1 161802 unplaced primary GL000220.1,HSCHRUN_RANDOM_CTG11,NT_167214.1 chrUn_GL000224v1 179693 unplaced primary GL000224.1,HSCHRUN_RANDOM_CTG16,NT_167218.1 chrUn_GL000226v1 15008 unplaced primary GL000226.1,HSCHRUN_RANDOM_CTG19,NT_167220.1 chrUn_KI270302v1 2274 unplaced primary HSCHRUN_RANDOM_100,KI270302.1,NT_187396.1 chrUn_KI270303v1 1942 unplaced primary HSCHRUN_RANDOM_102,KI270303.1,NT_187398.1 chrUn_KI270304v1 2165 unplaced primary HSCHRUN_RANDOM_101,KI270304.1,NT_187397.1 chrUn_KI270305v1 1472 unplaced primary HSCHRUN_RANDOM_103,KI270305.1,NT_187399.1 chrUn_KI270310v1 1201 unplaced primary HSCHRUN_RANDOM_106,KI270310.1,NT_187402.1 chrUn_KI270311v1 12399 unplaced primary HSCHRUN_RANDOM_110,KI270311.1,NT_187406.1 chrUn_KI270312v1 998 unplaced primary HSCHRUN_RANDOM_109,KI270312.1,NT_187405.1 chrUn_KI270315v1 2276 unplaced primary HSCHRUN_RANDOM_108,KI270315.1,NT_187404.1 chrUn_KI270316v1 1444 unplaced primary HSCHRUN_RANDOM_107,KI270316.1,NT_187403.1 chrUn_KI270317v1 37690 unplaced primary HSCHRUN_RANDOM_111,KI270317.1,NT_187407.1 chrUn_KI270320v1 4416 unplaced primary HSCHRUN_RANDOM_105,KI270320.1,NT_187401.1 chrUn_KI270322v1 21476 unplaced primary HSCHRUN_RANDOM_104,KI270322.1,NT_187400.1 chrUn_KI270329v1 1040 unplaced primary HSCHRUN_RANDOM_167,KI270329.1,NT_187459.1 chrUn_KI270330v1 1652 unplaced primary HSCHRUN_RANDOM_166,KI270330.1,NT_187458.1 chrUn_KI270333v1 2699 unplaced primary HSCHRUN_RANDOM_169,KI270333.1,NT_187461.1 chrUn_KI270334v1 1368 unplaced primary HSCHRUN_RANDOM_168,KI270334.1,NT_187460.1 chrUn_KI270335v1 1048 unplaced primary HSCHRUN_RANDOM_170,KI270335.1,NT_187462.1 chrUn_KI270336v1 1026 unplaced primary HSCHRUN_RANDOM_173,KI270336.1,NT_187465.1 chrUn_KI270337v1 1121 unplaced primary HSCHRUN_RANDOM_174,KI270337.1,NT_187466.1 chrUn_KI270338v1 1428 unplaced primary HSCHRUN_RANDOM_171,KI270338.1,NT_187463.1 chrUn_KI270340v1 1428 unplaced primary HSCHRUN_RANDOM_172,KI270340.1,NT_187464.1 chrUn_KI270362v1 3530 unplaced primary HSCHRUN_RANDOM_177,KI270362.1,NT_187469.1 chrUn_KI270363v1 1803 unplaced primary HSCHRUN_RANDOM_175,KI270363.1,NT_187467.1 chrUn_KI270364v1 2855 unplaced primary HSCHRUN_RANDOM_176,KI270364.1,NT_187468.1 chrUn_KI270366v1 8320 unplaced primary HSCHRUN_RANDOM_178,KI270366.1,NT_187470.1 chrUn_KI270371v1 2805 unplaced primary HSCHRUN_RANDOM_202,KI270371.1,NT_187494.1 chrUn_KI270372v1 1650 unplaced primary HSCHRUN_RANDOM_199,KI270372.1,NT_187491.1 chrUn_KI270373v1 1451 unplaced primary HSCHRUN_RANDOM_200,KI270373.1,NT_187492.1 chrUn_KI270374v1 2656 unplaced primary HSCHRUN_RANDOM_198,KI270374.1,NT_187490.1 chrUn_KI270375v1 2378 unplaced primary HSCHRUN_RANDOM_201,KI270375.1,NT_187493.1 chrUn_KI270376v1 1136 unplaced primary HSCHRUN_RANDOM_197,KI270376.1,NT_187489.1 chrUn_KI270378v1 1048 unplaced primary HSCHRUN_RANDOM_179,KI270378.1,NT_187471.1 chrUn_KI270379v1 1045 unplaced primary HSCHRUN_RANDOM_180,KI270379.1,NT_187472.1 chrUn_KI270381v1 1930 unplaced primary HSCHRUN_RANDOM_194,KI270381.1,NT_187486.1 chrUn_KI270382v1 4215 unplaced primary HSCHRUN_RANDOM_196,KI270382.1,NT_187488.1 chrUn_KI270383v1 1750 unplaced primary HSCHRUN_RANDOM_190,KI270383.1,NT_187482.1 chrUn_KI270384v1 1658 unplaced primary HSCHRUN_RANDOM_192,KI270384.1,NT_187484.1 chrUn_KI270385v1 990 unplaced primary HSCHRUN_RANDOM_195,KI270385.1,NT_187487.1 chrUn_KI270386v1 1788 unplaced primary HSCHRUN_RANDOM_188,KI270386.1,NT_187480.1 chrUn_KI270387v1 1537 unplaced primary HSCHRUN_RANDOM_183,KI270387.1,NT_187475.1 chrUn_KI270388v1 1216 unplaced primary HSCHRUN_RANDOM_186,KI270388.1,NT_187478.1 chrUn_KI270389v1 1298 unplaced primary HSCHRUN_RANDOM_181,KI270389.1,NT_187473.1 chrUn_KI270390v1 2387 unplaced primary HSCHRUN_RANDOM_182,KI270390.1,NT_187474.1 chrUn_KI270391v1 1484 unplaced primary HSCHRUN_RANDOM_189,KI270391.1,NT_187481.1 chrUn_KI270392v1 971 unplaced primary HSCHRUN_RANDOM_193,KI270392.1,NT_187485.1 chrUn_KI270393v1 1308 unplaced primary HSCHRUN_RANDOM_191,KI270393.1,NT_187483.1 chrUn_KI270394v1 970 unplaced primary HSCHRUN_RANDOM_187,KI270394.1,NT_187479.1 chrUn_KI270395v1 1143 unplaced primary HSCHRUN_RANDOM_184,KI270395.1,NT_187476.1 chrUn_KI270396v1 1880 unplaced primary HSCHRUN_RANDOM_185,KI270396.1,NT_187477.1 chrUn_KI270411v1 2646 unplaced primary HSCHRUN_RANDOM_113,KI270411.1,NT_187409.1 chrUn_KI270412v1 1179 unplaced primary HSCHRUN_RANDOM_112,KI270412.1,NT_187408.1 chrUn_KI270414v1 2489 unplaced primary HSCHRUN_RANDOM_114,KI270414.1,NT_187410.1 chrUn_KI270417v1 2043 unplaced primary HSCHRUN_RANDOM_119,KI270417.1,NT_187415.1 chrUn_KI270418v1 2145 unplaced primary HSCHRUN_RANDOM_116,KI270418.1,NT_187412.1 chrUn_KI270419v1 1029 unplaced primary HSCHRUN_RANDOM_115,KI270419.1,NT_187411.1 chrUn_KI270420v1 2321 unplaced primary HSCHRUN_RANDOM_117,KI270420.1,NT_187413.1 chrUn_KI270422v1 1445 unplaced primary HSCHRUN_RANDOM_120,KI270422.1,NT_187416.1 chrUn_KI270423v1 981 unplaced primary HSCHRUN_RANDOM_121,KI270423.1,NT_187417.1 chrUn_KI270424v1 2140 unplaced primary HSCHRUN_RANDOM_118,KI270424.1,NT_187414.1 chrUn_KI270425v1 1884 unplaced primary HSCHRUN_RANDOM_122,KI270425.1,NT_187418.1 chrUn_KI270429v1 1361 unplaced primary HSCHRUN_RANDOM_123,KI270429.1,NT_187419.1 chrUn_KI270435v1 92983 unplaced primary HSCHRUN_RANDOM_128,KI270435.1,NT_187424.1 chrUn_KI270438v1 112505 unplaced primary HSCHRUN_RANDOM_129,KI270438.1,NT_187425.1 chrUn_KI270442v1 392061 unplaced primary HSCHRUN_RANDOM_124,KI270442.1,NT_187420.1 chrUn_KI270448v1 7992 unplaced primary HSCHRUN_RANDOM_203,KI270448.1,NT_187495.1 chrUn_KI270465v1 1774 unplaced primary HSCHRUN_RANDOM_126,KI270465.1,NT_187422.1 chrUn_KI270466v1 1233 unplaced primary HSCHRUN_RANDOM_125,KI270466.1,NT_187421.1 chrUn_KI270467v1 3920 unplaced primary HSCHRUN_RANDOM_127,KI270467.1,NT_187423.1 chrUn_KI270468v1 4055 unplaced primary HSCHRUN_RANDOM_130,KI270468.1,NT_187426.1 chrUn_KI270507v1 5353 unplaced primary HSCHRUN_RANDOM_141,KI270507.1,NT_187437.1 chrUn_KI270508v1 1951 unplaced primary HSCHRUN_RANDOM_134,KI270508.1,NT_187430.1 chrUn_KI270509v1 2318 unplaced primary HSCHRUN_RANDOM_132,KI270509.1,NT_187428.1 chrUn_KI270510v1 2415 unplaced primary HSCHRUN_RANDOM_131,KI270510.1,NT_187427.1 chrUn_KI270511v1 8127 unplaced primary HSCHRUN_RANDOM_139,KI270511.1,NT_187435.1 chrUn_KI270512v1 22689 unplaced primary HSCHRUN_RANDOM_136,KI270512.1,NT_187432.1 chrUn_KI270515v1 6361 unplaced primary HSCHRUN_RANDOM_140,KI270515.1,NT_187436.1 chrUn_KI270516v1 1300 unplaced primary HSCHRUN_RANDOM_135,KI270516.1,NT_187431.1 chrUn_KI270517v1 3253 unplaced primary HSCHRUN_RANDOM_142,KI270517.1,NT_187438.1 chrUn_KI270518v1 2186 unplaced primary HSCHRUN_RANDOM_133,KI270518.1,NT_187429.1 chrUn_KI270519v1 138126 unplaced primary HSCHRUN_RANDOM_137,KI270519.1,NT_187433.1 chrUn_KI270521v1 7642 unplaced primary HSCHRUN_RANDOM_204,KI270521.1,NT_187496.1 chrUn_KI270522v1 5674 unplaced primary HSCHRUN_RANDOM_138,KI270522.1,NT_187434.1 chrUn_KI270528v1 2983 unplaced primary HSCHRUN_RANDOM_144,KI270528.1,NT_187440.1 chrUn_KI270529v1 1899 unplaced primary HSCHRUN_RANDOM_143,KI270529.1,NT_187439.1 chrUn_KI270530v1 2168 unplaced primary HSCHRUN_RANDOM_145,KI270530.1,NT_187441.1 chrUn_KI270538v1 91309 unplaced primary HSCHRUN_RANDOM_147,KI270538.1,NT_187443.1 chrUn_KI270539v1 993 unplaced primary HSCHRUN_RANDOM_146,KI270539.1,NT_187442.1 chrUn_KI270544v1 1202 unplaced primary HSCHRUN_RANDOM_148,KI270544.1,NT_187444.1 chrUn_KI270548v1 1599 unplaced primary HSCHRUN_RANDOM_149,KI270548.1,NT_187445.1 chrUn_KI270579v1 31033 unplaced primary HSCHRUN_RANDOM_158,KI270579.1,NT_187450.1 chrUn_KI270580v1 1553 unplaced primary HSCHRUN_RANDOM_156,KI270580.1,NT_187448.1 chrUn_KI270581v1 7046 unplaced primary HSCHRUN_RANDOM_157,KI270581.1,NT_187449.1 chrUn_KI270582v1 6504 unplaced primary HSCHRUN_RANDOM_162,KI270582.1,NT_187454.1 chrUn_KI270583v1 1400 unplaced primary HSCHRUN_RANDOM_154,KI270583.1,NT_187446.1 chrUn_KI270584v1 4513 unplaced primary HSCHRUN_RANDOM_161,KI270584.1,NT_187453.1 chrUn_KI270587v1 2969 unplaced primary HSCHRUN_RANDOM_155,KI270587.1,NT_187447.1 chrUn_KI270588v1 6158 unplaced primary HSCHRUN_RANDOM_163,KI270588.1,NT_187455.1 chrUn_KI270589v1 44474 unplaced primary HSCHRUN_RANDOM_159,KI270589.1,NT_187451.1 chrUn_KI270590v1 4685 unplaced primary HSCHRUN_RANDOM_160,KI270590.1,NT_187452.1 chrUn_KI270591v1 5796 unplaced primary HSCHRUN_RANDOM_165,KI270591.1,NT_187457.1 chrUn_KI270593v1 3041 unplaced primary HSCHRUN_RANDOM_164,KI270593.1,NT_187456.1 chrUn_KI270741v1 157432 unplaced primary HSCHRUN_RANDOM_CTG17,KI270741.1,NT_187497.1 chrUn_KI270742v1 186739 unplaced primary HSCHRUN_RANDOM_CTG42,KI270742.1,NT_187513.1 chrUn_KI270743v1 210658 unplaced primary HSCHRUN_RANDOM_CTG20,KI270743.1,NT_187498.1 chrUn_KI270744v1 168472 unplaced primary HSCHRUN_RANDOM_CTG21,KI270744.1,NT_187499.1 chrUn_KI270745v1 41891 unplaced primary HSCHRUN_RANDOM_CTG22,KI270745.1,NT_187500.1 chrUn_KI270746v1 66486 unplaced primary HSCHRUN_RANDOM_CTG23,KI270746.1,NT_187501.1 chrUn_KI270747v1 198735 unplaced primary HSCHRUN_RANDOM_CTG24,KI270747.1,NT_187502.1 chrUn_KI270748v1 93321 unplaced primary HSCHRUN_RANDOM_CTG25,KI270748.1,NT_187503.1 chrUn_KI270749v1 158759 unplaced primary HSCHRUN_RANDOM_CTG26,KI270749.1,NT_187504.1 chrUn_KI270750v1 148850 unplaced primary HSCHRUN_RANDOM_CTG27,KI270750.1,NT_187505.1 chrUn_KI270751v1 150742 unplaced primary HSCHRUN_RANDOM_CTG28,KI270751.1,NT_187506.1 chrUn_KI270752v1 27745 unplaced primary HSCHRUN_RANDOM_CTG29,KI270752.1 chrUn_KI270753v1 62944 unplaced primary HSCHRUN_RANDOM_CTG30,KI270753.1,NT_187508.1 chrUn_KI270754v1 40191 unplaced primary HSCHRUN_RANDOM_CTG33,KI270754.1,NT_187509.1 chrUn_KI270755v1 36723 unplaced primary HSCHRUN_RANDOM_CTG34,KI270755.1,NT_187510.1 chrUn_KI270756v1 79590 unplaced primary HSCHRUN_RANDOM_CTG35,KI270756.1,NT_187511.1 chrUn_KI270757v1 71251 unplaced primary HSCHRUN_RANDOM_CTG36,KI270757.1,NT_187512.1 chrEBV 171823 assembled chrEBV decoy AJ507799.2,NC_007605.1 open2c-bioframe-4fe9b25/bioframe/io/data/hs1.cytoband.tsv000066400000000000000000000740741477525772300233020ustar00rootroot00000000000000chrom start end band stain chr1 0 1735965 p36.33 gneg chr1 1735965 4816989 p36.32 gpos25 chr1 4816989 6629068 p36.31 gneg chr1 6629068 8634052 p36.23 gpos25 chr1 8634052 12044143 p36.22 gneg chr1 12044143 15341266 p36.21 gpos50 chr1 15341266 19923637 p36.13 gneg chr1 19923637 23434574 p36.12 gpos25 chr1 23434574 27441306 p36.11 gneg chr1 27441306 29743244 p35.3 gpos25 chr1 29743244 32157918 p35.2 gneg chr1 32157918 34161711 p35.1 gpos25 chr1 34161711 39468378 p34.3 gneg chr1 39468378 43570492 p34.2 gpos25 chr1 43570492 46177222 p34.1 gneg chr1 46177222 50078974 p33 gpos75 chr1 50078974 55482505 p32.3 gneg chr1 55482505 58377946 p32.2 gpos50 chr1 58377946 60678767 p32.1 gneg chr1 60678767 68377386 p31.3 gpos50 chr1 68377386 69177517 p31.2 gneg chr1 69177517 84240464 p31.1 gpos100 chr1 84240464 87743231 p22.3 gneg chr1 87743231 91344645 p22.2 gpos75 chr1 91344645 94148241 p22.1 gneg chr1 94148241 99148340 p21.3 gpos75 chr1 99148340 101649187 p21.2 gneg chr1 101649187 106737488 p21.1 gpos100 chr1 106737488 111214805 p13.3 gneg chr1 111214805 115511187 p13.2 gpos50 chr1 115511187 117210493 p13.1 gneg chr1 117210493 120413269 p12 gpos50 chr1 120413269 121796048 p11.2 gneg chr1 121796048 124048267 p11.1 acen chr1 124048267 126300487 q11 acen chr1 126300487 142241659 q12 gvar chr1 142241659 147308041 q21.1 gneg chr1 147308041 149724009 q21.2 gpos50 chr1 149724009 154239365 q21.3 gneg chr1 154239365 155736378 q22 gpos50 chr1 155736378 158237044 q23.1 gneg chr1 158237044 159637083 q23.2 gpos50 chr1 159637083 164846435 q23.3 gneg chr1 164846435 166547042 q24.1 gpos50 chr1 166547042 170256335 q24.2 gneg chr1 170256335 172358116 q24.3 gpos75 chr1 172358116 175455343 q25.1 gneg chr1 175455343 179655381 q25.2 gpos50 chr1 179655381 185154686 q25.3 gneg chr1 185154686 190146214 q31.1 gpos100 chr1 190146214 193148937 q31.2 gneg chr1 193148937 197959914 q31.3 gpos100 chr1 197959914 206365243 q32.1 gneg chr1 206365243 210545587 q32.2 gpos25 chr1 210545587 213639518 q32.3 gneg chr1 213639518 223089723 q41 gpos100 chr1 223089723 223588804 q42.11 gneg chr1 223588804 225987880 q42.12 gpos25 chr1 225987880 229880334 q42.13 gneg chr1 229880334 233990393 q42.2 gpos50 chr1 233990393 235800112 q42.3 gneg chr1 235800112 242911804 q43 gpos75 chr1 242911804 248387328 q44 gneg chr2 0 4423386 p25.3 gneg chr2 4423386 6921497 p25.2 gpos50 chr2 6921497 12028815 p25.1 gneg chr2 12028815 16531703 p24.3 gpos75 chr2 16531703 19032774 p24.2 gneg chr2 19032774 23835087 p24.1 gpos75 chr2 23835087 27743068 p23.3 gneg chr2 27743068 29843598 p23.2 gpos25 chr2 29843598 31845058 p23.1 gneg chr2 31845058 36306629 p22.3 gpos75 chr2 36306629 38306895 p22.2 gneg chr2 38306895 41509232 p22.1 gpos50 chr2 41509232 47505052 p21 gneg chr2 47505052 52596301 p16.3 gpos100 chr2 52596301 54694000 p16.2 gneg chr2 54694000 61005834 p16.1 gpos100 chr2 61005834 63907559 p15 gneg chr2 63907559 68410570 p14 gpos50 chr2 68410570 71311026 p13.3 gneg chr2 71311026 73312998 p13.2 gpos50 chr2 73312998 74808844 p13.1 gneg chr2 74808844 83100333 p12 gpos100 chr2 83100333 92333543 p11.2 gneg chr2 92333543 93503283 p11.1 acen chr2 93503283 94673023 q11.1 acen chr2 94673023 102558292 q11.2 gneg chr2 102558292 105761211 q12.1 gpos50 chr2 105761211 107161426 q12.2 gneg chr2 107161426 109160598 q12.3 gpos25 chr2 109160598 112626870 q13 gneg chr2 112626870 118533173 q14.1 gpos50 chr2 118533173 122035284 q14.2 gneg chr2 122035284 129528325 q14.3 gpos50 chr2 129528325 132134645 q21.1 gneg chr2 132134645 134739485 q21.2 gpos25 chr2 134739485 136544463 q21.3 gneg chr2 136544463 141946261 q22.1 gpos100 chr2 141946261 143848187 q22.2 gneg chr2 143848187 148350462 q22.3 gpos100 chr2 148350462 149450376 q23.1 gneg chr2 149450376 150050446 q23.2 gpos25 chr2 150050446 154452841 q23.3 gneg chr2 154452841 159362096 q24.1 gpos75 chr2 159362096 163356865 q24.2 gneg chr2 163356865 169374490 q24.3 gpos75 chr2 169374490 177582181 q31.1 gneg chr2 177582181 180183173 q31.2 gpos50 chr2 180183173 182589080 q31.3 gneg chr2 182589080 188988809 q32.1 gpos75 chr2 188988809 191589136 q32.2 gneg chr2 191589136 197084040 q32.3 gpos75 chr2 197084040 202981065 q33.1 gneg chr2 202981065 204581908 q33.2 gpos50 chr2 204581908 208679779 q33.3 gneg chr2 208679779 214984516 q34 gpos100 chr2 214984516 221185014 q35 gneg chr2 221185014 224783144 q36.1 gpos75 chr2 224783144 225681833 q36.2 gneg chr2 225681833 230582566 q36.3 gpos100 chr2 230582566 235189048 q37.1 gneg chr2 235189048 236890330 q37.2 gpos50 chr2 236890330 242696752 q37.3 gneg chr3 0 2794029 p26.3 gpos50 chr3 2794029 3995951 p26.2 gneg chr3 3995951 8091216 p26.1 gpos50 chr3 8091216 11595822 p25.3 gneg chr3 11595822 13200348 p25.2 gpos25 chr3 13200348 16301213 p25.1 gneg chr3 16301213 23804776 p24.3 gpos100 chr3 23804776 26302605 p24.2 gneg chr3 26302605 30802486 p24.1 gpos75 chr3 30802486 32002957 p23 gneg chr3 32002957 36401366 p22.3 gpos50 chr3 36401366 39312902 p22.2 gneg chr3 39312902 43615563 p22.1 gpos75 chr3 43615563 44115566 p21.33 gneg chr3 44115566 44215563 p21.32 gpos50 chr3 44215563 50629881 p21.31 gneg chr3 50629881 52332899 p21.2 gpos25 chr3 52332899 54433863 p21.1 gneg chr3 54433863 58640379 p14.3 gpos50 chr3 58640379 63843624 p14.2 gneg chr3 63843624 69736880 p14.1 gpos50 chr3 69736880 74141615 p13 gneg chr3 74141615 79855975 p12.3 gpos75 chr3 79855975 83556432 p12.2 gneg chr3 83556432 87174355 p12.1 gpos75 chr3 87174355 91738002 p11.2 gneg chr3 91738002 94076514 p11.1 acen chr3 94076514 96415026 q11.1 acen chr3 96415026 101303688 q11.2 gvar chr3 101303688 103005343 q12.1 gneg chr3 103005343 103905942 q12.2 gpos25 chr3 103905942 105816831 q12.3 gneg chr3 105816831 109218980 q13.11 gpos75 chr3 109218980 110919781 q13.12 gneg chr3 110919781 114320814 q13.13 gpos50 chr3 114320814 116421198 q13.2 gneg chr3 116421198 120319753 q13.31 gpos75 chr3 120319753 122019706 q13.32 gneg chr3 122019706 124919592 q13.33 gpos75 chr3 124919592 126826138 q21.1 gneg chr3 126826138 128832394 q21.2 gpos25 chr3 128832394 132244475 q21.3 gneg chr3 132244475 136745163 q22.1 gpos25 chr3 136745163 138745773 q22.2 gneg chr3 138745773 141741001 q22.3 gpos25 chr3 141741001 145847398 q23 gneg chr3 145847398 151950769 q24 gpos100 chr3 151950769 155067896 q25.1 gneg chr3 155067896 158073984 q25.2 gpos50 chr3 158073984 160074579 q25.31 gneg chr3 160074579 162074354 q25.32 gpos50 chr3 162074354 163774734 q25.33 gneg chr3 163774734 170683909 q26.1 gpos100 chr3 170683909 173984304 q26.2 gneg chr3 173984304 178794975 q26.31 gpos75 chr3 178794975 182103836 q26.32 gneg chr3 182103836 185805095 q26.33 gpos75 chr3 185805095 187615802 q27.1 gneg chr3 187615802 189115680 q27.2 gpos25 chr3 189115680 191017553 q27.3 gneg chr3 191017553 195295941 q28 gpos75 chr3 195295941 201105948 q29 gneg chr4 0 4469440 p16.3 gneg chr4 4469440 5971735 p16.2 gpos25 chr4 5971735 11276065 p16.1 gneg chr4 11276065 14981780 p15.33 gpos50 chr4 14981780 17682307 p15.32 gneg chr4 17682307 21281575 p15.31 gpos75 chr4 21281575 27685358 p15.2 gneg chr4 27685358 35768949 p15.1 gpos100 chr4 35768949 41173799 p14 gneg chr4 41173799 44566953 p13 gpos50 chr4 44566953 49705154 p12 gneg chr4 49705154 52452474 p11 acen chr4 52452474 55199795 q11 acen chr4 55199795 61991213 q12 gneg chr4 61991213 68936809 q13.1 gpos100 chr4 68936809 72734812 q13.2 gneg chr4 72734812 78640131 q13.3 gpos75 chr4 78640131 81340837 q21.1 gneg chr4 81340837 84829707 q21.21 gpos50 chr4 84829707 86530115 q21.22 gneg chr4 86530115 89329480 q21.23 gpos25 chr4 89329480 90429379 q21.3 gneg chr4 90429379 96127729 q22.1 gpos75 chr4 96127729 97515472 q22.2 gneg chr4 97515472 101214669 q22.3 gpos75 chr4 101214669 103415497 q23 gneg chr4 103415497 110005081 q24 gpos50 chr4 110005081 116508718 q25 gneg chr4 116508718 123205172 q26 gpos75 chr4 123205172 126104099 q27 gneg chr4 126104099 131203026 q28.1 gpos50 chr4 131203026 133404460 q28.2 gneg chr4 133404460 141823705 q28.3 gpos100 chr4 141823705 143919702 q31.1 gneg chr4 143919702 149216051 q31.21 gpos25 chr4 149216051 150824125 q31.22 gneg chr4 150824125 153521681 q31.23 gpos25 chr4 153521681 157931811 q31.3 gneg chr4 157931811 164150415 q32.1 gpos100 chr4 164150415 166947399 q32.2 gneg chr4 166947399 172559730 q32.3 gpos100 chr4 172559730 174357423 q33 gneg chr4 174357423 178738596 q34.1 gpos75 chr4 178738596 179939101 q34.2 gneg chr4 179939101 185641813 q34.3 gpos100 chr4 185641813 189540361 q35.1 gneg chr4 189540361 193574945 q35.2 gpos25 chr5 0 4327607 p15.33 gneg chr5 4327607 6228676 p15.32 gpos25 chr5 6228676 9839807 p15.31 gneg chr5 9839807 14939449 p15.2 gpos50 chr5 14939449 18401838 p15.1 gneg chr5 18401838 23407694 p14.3 gpos100 chr5 23407694 24705214 p14.2 gneg chr5 24705214 29005224 p14.1 gpos100 chr5 29005224 33919872 p13.3 gneg chr5 33919872 38649069 p13.2 gpos25 chr5 38649069 42755507 p13.1 gneg chr5 42755507 47039134 p12 gpos50 chr5 47039134 48317879 p11 acen chr5 48317879 49596625 q11.1 acen chr5 49596625 60418219 q11.2 gneg chr5 60418219 64420173 q12.1 gpos75 chr5 64420173 64720135 q12.2 gneg chr5 64720135 68222153 q12.3 gpos75 chr5 68222153 69922486 q13.1 gneg chr5 69922486 74481328 q13.2 gpos50 chr5 74481328 78082577 q13.3 gneg chr5 78082577 82584664 q14.1 gpos50 chr5 82584664 83988771 q14.2 gneg chr5 83988771 93484055 q14.3 gpos100 chr5 93484055 99403284 q15 gneg chr5 99403284 103908183 q21.1 gpos100 chr5 103908183 105604211 q21.2 gneg chr5 105604211 110710493 q21.3 gpos100 chr5 110710493 112710455 q22.1 gneg chr5 112710455 114312885 q22.2 gpos50 chr5 114312885 116412397 q22.3 gneg chr5 116412397 122616882 q23.1 gpos100 chr5 122616882 128419736 q23.2 gneg chr5 128419736 131718996 q23.3 gpos100 chr5 131718996 137422646 q31.1 gneg chr5 137422646 140625098 q31.2 gpos25 chr5 140625098 145634538 q31.3 gneg chr5 145634538 150936541 q32 gpos75 chr5 150936541 153833148 q33.1 gneg chr5 153833148 156818817 q33.2 gpos50 chr5 156818817 161028563 q33.3 gneg chr5 161028563 169535680 q34 gpos100 chr5 169535680 173840079 q35.1 gneg chr5 173840079 177643208 q35.2 gpos25 chr5 177643208 182045439 q35.3 gneg chr6 0 2163637 p25.3 gneg chr6 2163637 4069276 p25.2 gpos25 chr6 4069276 6969513 p25.1 gneg chr6 6969513 10467733 p24.3 gpos50 chr6 10467733 11468370 p24.2 gneg chr6 11468370 13273264 p24.1 gpos25 chr6 13273264 15073193 p23 gneg chr6 15073193 25065737 p22.3 gpos75 chr6 25065737 26968681 p22.2 gneg chr6 26968681 30364188 p22.1 gpos50 chr6 30364188 31953196 p21.33 gneg chr6 31953196 33321362 p21.32 gpos25 chr6 33321362 36420643 p21.31 gneg chr6 36420643 40327879 p21.2 gpos25 chr6 40327879 46035128 p21.1 gneg chr6 46035128 51643048 p12.3 gpos100 chr6 51643048 52839576 p12.2 gneg chr6 52839576 57039025 p12.1 gpos100 chr6 57039025 58286706 p11.2 gneg chr6 58286706 59672548 p11.1 acen chr6 59672548 61058390 q11.1 acen chr6 61058390 63845066 q11.2 gneg chr6 63845066 70378649 q12 gpos100 chr6 70378649 76377151 q13 gneg chr6 76377151 84423242 q14.1 gpos50 chr6 84423242 85423294 q14.2 gneg chr6 85423294 88508804 q14.3 gpos50 chr6 88508804 93711666 q15 gneg chr6 93711666 100074369 q16.1 gpos100 chr6 100074369 101173694 q16.2 gneg chr6 101173694 106176013 q16.3 gpos100 chr6 106176013 115383115 q21 gneg chr6 115383115 119084265 q22.1 gpos75 chr6 119084265 119285071 q22.2 gneg chr6 119285071 126988674 q22.31 gpos100 chr6 126988674 127988742 q22.32 gneg chr6 127988742 131194763 q22.33 gpos75 chr6 131194763 132095087 q23.1 gneg chr6 132095087 135888233 q23.2 gpos50 chr6 135888233 139488489 q23.3 gneg chr6 139488489 143392072 q24.1 gpos75 chr6 143392072 146292619 q24.2 gneg chr6 146292619 149696304 q24.3 gpos75 chr6 149696304 153301308 q25.1 gneg chr6 153301308 156401943 q25.2 gpos50 chr6 156401943 161852984 q25.3 gneg chr6 161852984 165464819 q26 gpos50 chr6 165464819 172126628 q27 gneg chr7 0 2913569 p22.3 gneg chr7 2913569 4616674 p22.2 gpos25 chr7 4616674 7319206 p22.1 gneg chr7 7319206 13832042 p21.3 gpos100 chr7 13832042 16629717 p21.2 gneg chr7 16629717 21036083 p21.1 gpos100 chr7 21036083 25635438 p15.3 gneg chr7 25635438 28037762 p15.2 gpos50 chr7 28037762 28937489 p15.1 gneg chr7 28937489 35040677 p14.3 gpos75 chr7 35040677 37240409 p14.2 gneg chr7 37240409 43458167 p14.1 gpos75 chr7 43458167 45560768 p13 gneg chr7 45560768 49160858 p12.3 gpos75 chr7 49160858 50661224 p12.2 gneg chr7 50661224 54061627 p12.1 gpos75 chr7 54061627 60414372 p11.2 gneg chr7 60414372 62064435 p11.1 acen chr7 62064435 63714499 q11.1 acen chr7 63714499 68720114 q11.21 gneg chr7 68720114 73918537 q11.22 gpos50 chr7 73918537 79151921 q11.23 gneg chr7 79151921 87949894 q21.11 gpos100 chr7 87949894 89750628 q21.12 gneg chr7 89750628 92747879 q21.13 gpos75 chr7 92747879 94542054 q21.2 gneg chr7 94542054 99630796 q21.3 gpos75 chr7 99630796 105514255 q22.1 gneg chr7 105514255 106214835 q22.2 gpos50 chr7 106214835 109118351 q22.3 gneg chr7 109118351 116314793 q31.1 gpos75 chr7 116314793 119015389 q31.2 gneg chr7 119015389 122715324 q31.31 gpos75 chr7 122715324 125416714 q31.32 gneg chr7 125416714 128811644 q31.33 gpos75 chr7 128811644 130913119 q32.1 gneg chr7 130913119 132117533 q32.2 gpos25 chr7 132117533 134221510 q32.3 gneg chr7 134221510 139809728 q33 gpos50 chr7 139809728 144755427 q34 gneg chr7 144755427 149379963 q35 gpos75 chr7 149379963 153973252 q36.1 gneg chr7 153973252 156375514 q36.2 gpos25 chr7 156375514 160567428 q36.3 gneg chr8 0 2084125 p23.3 gneg chr8 2084125 6054502 p23.2 gpos75 chr8 6054502 13066163 p23.1 gneg chr8 13066163 19465021 p22 gpos100 chr8 19465021 23774881 p21.3 gneg chr8 23774881 27777347 p21.2 gpos50 chr8 27777347 29278158 p21.1 gneg chr8 29278158 36976053 p12 gpos75 chr8 36976053 38776976 p11.23 gneg chr8 38776976 40177151 p11.22 gpos25 chr8 40177151 44215832 p11.21 gneg chr8 44215832 45270456 p11.1 acen chr8 45270456 46325080 q11.1 acen chr8 46325080 51673061 q11.21 gneg chr8 51673061 52073547 q11.22 gpos75 chr8 52073547 54977464 q11.23 gneg chr8 54977464 61023743 q12.1 gpos50 chr8 61023743 61723740 q12.2 gneg chr8 61723740 65525777 q12.3 gpos50 chr8 65525777 67526469 q13.1 gneg chr8 67526469 70029827 q13.2 gpos50 chr8 70029827 72435109 q13.3 gneg chr8 72435109 75029437 q21.11 gpos100 chr8 75029437 75129430 q21.12 gneg chr8 75129430 83931590 q21.13 gpos75 chr8 83931590 87017433 q21.2 gneg chr8 87017433 93425090 q21.3 gpos100 chr8 93425090 99025482 q22.1 gneg chr8 99025482 101626041 q22.2 gpos25 chr8 101626041 106227505 q22.3 gneg chr8 106227505 110628554 q23.1 gpos75 chr8 110628554 112228628 q23.2 gneg chr8 112228628 117826624 q23.3 gpos100 chr8 117826624 119428452 q24.11 gneg chr8 119428452 122630227 q24.12 gpos50 chr8 122630227 127427152 q24.13 gneg chr8 127427152 131526643 q24.21 gpos50 chr8 131526643 136517853 q24.22 gneg chr8 136517853 140019529 q24.23 gpos75 chr8 140019529 146259331 q24.3 gneg chr9 0 2202472 p24.3 gneg chr9 2202472 4603652 p24.2 gpos25 chr9 4603652 9006617 p24.1 gneg chr9 9006617 14209493 p23 gpos75 chr9 14209493 16611825 p22.3 gneg chr9 16611825 18513245 p22.2 gpos25 chr9 18513245 19913875 p22.1 gneg chr9 19913875 25610359 p21.3 gpos100 chr9 25610359 28010599 p21.2 gneg chr9 28010599 33218700 p21.1 gpos100 chr9 33218700 36322011 p13.3 gneg chr9 36322011 37923910 p13.2 gpos25 chr9 37923910 39013701 p13.1 gneg chr9 39013701 40014198 p12 gpos50 chr9 40014198 44951775 p11.2 gneg chr9 44951775 46267185 p11.1 acen chr9 46267185 47582595 q11 acen chr9 47582595 76694047 q12 gvar chr9 76694047 77166639 q13 gneg chr9 77166639 81466639 q21.11 gpos25 chr9 81466639 83449676 q21.12 gneg chr9 83449676 88756405 q21.13 gpos50 chr9 88756405 90657183 q21.2 gneg chr9 90657183 93652149 q21.31 gpos50 chr9 93652149 96450330 q21.32 gneg chr9 96450330 99953385 q21.33 gpos50 chr9 99953385 101362780 q22.1 gneg chr9 101362780 103366144 q22.2 gpos25 chr9 103366144 106067989 q22.31 gneg chr9 106067989 108671778 q22.32 gpos25 chr9 108671778 111971620 q22.33 gneg chr9 111971620 117574632 q31.1 gpos100 chr9 117574632 120669232 q31.2 gneg chr9 120669232 124271384 q31.3 gpos25 chr9 124271384 127092454 q32 gneg chr9 127092454 131993831 q33.1 gpos75 chr9 131993831 135297230 q33.2 gneg chr9 135297230 139706950 q33.3 gpos25 chr9 139706950 142804928 q34.11 gneg chr9 142804928 143308266 q34.12 gpos25 chr9 143308266 145314130 q34.13 gneg chr9 145314130 146716800 q34.2 gpos25 chr9 146716800 150617247 q34.3 gneg chr10 0 2999810 p15.3 gneg chr10 2999810 3803899 p15.2 gpos25 chr10 3803899 6600140 p15.1 gneg chr10 6600140 12211271 p14 gpos75 chr10 12211271 17318428 p13 gneg chr10 17318428 18319354 p12.33 gpos75 chr10 18319354 18419356 p12.32 gneg chr10 18419356 22319034 p12.31 gpos75 chr10 22319034 24318538 p12.2 gneg chr10 24318538 29331681 p12.1 gpos50 chr10 29331681 31131269 p11.23 gneg chr10 31131269 34228529 p11.22 gpos25 chr10 34228529 39633793 p11.21 gneg chr10 39633793 40649191 p11.1 acen chr10 40649191 41664589 q11.1 acen chr10 41664589 46381004 q11.21 gneg chr10 46381004 49449041 q11.22 gpos25 chr10 49449041 51948621 q11.23 gneg chr10 51948621 60254318 q21.1 gpos100 chr10 60254318 63658144 q21.2 gneg chr10 63658144 69669152 q21.3 gpos100 chr10 69669152 73971392 q22.1 gneg chr10 73971392 76774110 q22.2 gpos50 chr10 76774110 81169099 q22.3 gneg chr10 81169099 86980090 q23.1 gpos100 chr10 86980090 88583858 q23.2 gneg chr10 88583858 91983671 q23.31 gpos75 chr10 91983671 93182363 q23.32 gneg chr10 93182363 96179180 q23.33 gpos50 chr10 96179180 98380193 q24.1 gneg chr10 98380193 100984294 q24.2 gpos50 chr10 100984294 102083356 q24.31 gneg chr10 102083356 103986242 q24.32 gpos25 chr10 103986242 104887391 q24.33 gneg chr10 104887391 110983867 q25.1 gpos100 chr10 110983867 113991312 q25.2 gneg chr10 113991312 118194477 q25.3 gpos75 chr10 118194477 120797529 q26.11 gneg chr10 120797529 122296091 q26.12 gpos50 chr10 122296091 126582419 q26.13 gneg chr10 126582419 129725246 q26.2 gpos50 chr10 129725246 134758134 q26.3 gneg chr11 0 2889344 p15.5 gneg chr11 2889344 11789203 p15.4 gpos50 chr11 11789203 13892569 p15.3 gneg chr11 13892569 16997372 p15.2 gpos50 chr11 16997372 22120532 p15.1 gneg chr11 22120532 26340879 p14.3 gpos100 chr11 26340879 27340466 p14.2 gneg chr11 27340466 31136090 p14.1 gpos75 chr11 31136090 36542448 p13 gneg chr11 36542448 43555411 p12 gpos100 chr11 43555411 48958062 p11.2 gneg chr11 48958062 51035789 p11.12 gpos75 chr11 51035789 52743313 p11.11 acen chr11 52743313 54450838 q11 acen chr11 54450838 60051280 q12.1 gpos75 chr11 60051280 61888804 q12.2 gneg chr11 61888804 63589288 q12.3 gpos25 chr11 63589288 66094130 q13.1 gneg chr11 66094130 68706120 q13.2 gpos25 chr11 68706120 70520423 q13.3 gneg chr11 70520423 75429506 q13.4 gpos50 chr11 75429506 77332929 q13.5 gneg chr11 77332929 85836684 q14.1 gpos100 chr11 85836684 88519134 q14.2 gneg chr11 88519134 92928863 q14.3 gpos100 chr11 92928863 97406624 q21 gneg chr11 97406624 102302118 q22.1 gpos100 chr11 102302118 103003764 q22.2 gneg chr11 103003764 110610246 q22.3 gpos100 chr11 110610246 112710438 q23.1 gneg chr11 112710438 114610447 q23.2 gpos50 chr11 114610447 121325059 q23.3 gneg chr11 121325059 124028615 q24.1 gpos50 chr11 124028615 127933253 q24.2 gneg chr11 127933253 130935758 q24.3 gpos50 chr11 130935758 135127769 q25 gneg chr12 0 3215744 p13.33 gneg chr12 3215744 5306179 p13.32 gpos25 chr12 5306179 9886155 p13.31 gneg chr12 9886155 12469144 p13.2 gpos75 chr12 12469144 14477435 p13.1 gneg chr12 14477435 19678338 p12.3 gpos100 chr12 19678338 20978622 p12.2 gneg chr12 20978622 26172544 p12.1 gpos100 chr12 26172544 27471672 p11.23 gneg chr12 27471672 30374680 p11.22 gpos50 chr12 30374680 34620838 p11.21 gneg chr12 34620838 35911664 p11.1 acen chr12 35911664 37202490 q11 acen chr12 37202490 45959545 q12 gpos100 chr12 45959545 48662027 q13.11 gneg chr12 48662027 51062917 q13.12 gpos25 chr12 51062917 54466577 q13.13 gneg chr12 54466577 56167601 q13.2 gpos25 chr12 56167601 57668365 q13.3 gneg chr12 57668365 62678775 q14.1 gpos75 chr12 62678775 64679035 q14.2 gneg chr12 64679035 67279394 q14.3 gpos50 chr12 67279394 71079501 q15 gneg chr12 71079501 75274601 q21.1 gpos75 chr12 75274601 79878671 q21.2 gneg chr12 79878671 86280942 q21.31 gpos100 chr12 86280942 88581935 q21.32 gneg chr12 88581935 92177463 q21.33 gpos100 chr12 92177463 95779143 q22 gneg chr12 95779143 101161710 q23.1 gpos75 chr12 101161710 103460805 q23.2 gneg chr12 103460805 108574599 q23.3 gpos50 chr12 108574599 111279651 q24.11 gneg chr12 111279651 111876909 q24.12 gpos25 chr12 111876909 113875849 q24.13 gneg chr12 113875849 116381153 q24.21 gpos50 chr12 116381153 117687226 q24.22 gneg chr12 117687226 120287197 q24.23 gpos50 chr12 120287197 125408188 q24.31 gneg chr12 125408188 128730796 q24.32 gpos50 chr12 128730796 133324548 q24.33 gneg chr13 0 5751447 p13 gvar chr13 5751447 9368750 p12 stalk chr13 9368750 15547593 p11.2 gvar chr13 15547593 16522942 p11.1 acen chr13 16522942 17498291 q11 acen chr13 17498291 21797623 q12.11 gneg chr13 21797623 24108235 q12.12 gpos25 chr13 24108235 26420720 q12.13 gneg chr13 26420720 27522230 q12.2 gpos25 chr13 27522230 30823418 q12.3 gneg chr13 30823418 32617334 q13.1 gpos50 chr13 32617334 34118269 q13.2 gneg chr13 34118269 38718394 q13.3 gpos75 chr13 38718394 43819777 q14.11 gneg chr13 43819777 44420051 q14.12 gpos25 chr13 44420051 45921251 q14.13 gneg chr13 45921251 49520618 q14.2 gpos50 chr13 49520618 53916044 q14.3 gneg chr13 53916044 58219746 q21.1 gpos100 chr13 58219746 61020124 q21.2 gneg chr13 61020124 64418827 q21.31 gpos75 chr13 64418827 67322320 q21.32 gneg chr13 67322320 72021474 q21.33 gpos100 chr13 72021474 74123996 q22.1 gneg chr13 74123996 75923712 q22.2 gpos50 chr13 75923712 77725243 q22.3 gneg chr13 77725243 86303655 q31.1 gpos100 chr13 86303655 88604095 q31.2 gneg chr13 88604095 93603590 q31.3 gpos100 chr13 93603590 96706317 q32.1 gneg chr13 96706317 97909939 q32.2 gpos25 chr13 97909939 100315089 q32.3 gneg chr13 100315089 103418692 q33.1 gpos100 chr13 103418692 105620405 q33.2 gneg chr13 105620405 108828306 q33.3 gpos100 chr13 108828306 113566686 q34 gneg chr14 0 2077628 p13 gvar chr14 2077628 2840421 p12 stalk chr14 2840421 10092112 p11.2 gvar chr14 10092112 11400261 p11.1 acen chr14 11400261 12708411 q11.1 acen chr14 12708411 18298312 q11.2 gneg chr14 18298312 27096896 q12 gpos100 chr14 27096896 28999171 q13.1 gneg chr14 28999171 30288797 q13.2 gpos50 chr14 30288797 31589055 q13.3 gneg chr14 31589055 37191028 q21.1 gpos100 chr14 37191028 40898832 q21.2 gneg chr14 40898832 44606207 q21.3 gpos100 chr14 44606207 47808271 q22.1 gneg chr14 47808271 49205176 q22.2 gpos25 chr14 49205176 51806957 q22.3 gneg chr14 51806957 55806586 q23.1 gpos75 chr14 55806586 58507715 q23.2 gneg chr14 58507715 61607123 q23.3 gpos50 chr14 61607123 64007668 q24.1 gneg chr14 64007668 67506518 q24.2 gpos50 chr14 67506518 73008616 q24.3 gneg chr14 73008616 77312020 q31.1 gpos100 chr14 77312020 78613483 q31.2 gneg chr14 78613483 83523641 q31.3 gpos100 chr14 83523641 85625240 q32.11 gneg chr14 85625240 88427273 q32.12 gpos25 chr14 88427273 90031477 q32.13 gneg chr14 90031477 95135433 q32.2 gpos50 chr14 95135433 96936346 q32.31 gneg chr14 96936346 97736032 q32.32 gpos50 chr14 97736032 101161492 q32.33 gneg chr15 0 2484618 p13 gvar chr15 2484618 4728636 p12 stalk chr15 4728636 16678794 p11.2 gvar chr15 16678794 17186630 p11.1 acen chr15 17186630 17694466 q11.1 acen chr15 17694466 23236963 q11.2 gneg chr15 23236963 25542506 q12 gpos50 chr15 25542506 27791711 q13.1 gneg chr15 27791711 28693986 q13.2 gpos50 chr15 28693986 31196487 q13.3 gneg chr15 31196487 37605195 q14 gpos75 chr15 37605195 40306040 q15.1 gneg chr15 40306040 41107300 q15.2 gpos25 chr15 41107300 42307677 q15.3 gneg chr15 42307677 47008200 q21.1 gpos75 chr15 47008200 50408265 q21.2 gneg chr15 50408265 56602018 q21.3 gpos75 chr15 56602018 56802078 q22.1 gneg chr15 56802078 61204679 q22.2 gpos25 chr15 61204679 64721821 q22.31 gneg chr15 64721821 64821874 q22.32 gpos25 chr15 64821874 65021911 q22.33 gneg chr15 65021911 70217331 q23 gpos25 chr15 70217331 72769881 q24.1 gneg chr15 72769881 74171079 q24.2 gpos25 chr15 74171079 75862542 q24.3 gneg chr15 75862542 79264071 q25.1 gpos50 chr15 79264071 82452409 q25.2 gneg chr15 82452409 86254599 q25.3 gpos50 chr15 86254599 91561911 q26.1 gneg chr15 91561911 95765652 q26.2 gpos50 chr15 95765652 99753195 q26.3 gneg chr16 0 7831635 p13.3 gneg chr16 7831635 10435669 p13.2 gpos50 chr16 10435669 12537038 p13.13 gneg chr16 12537038 14730876 p13.12 gpos50 chr16 14730876 16712187 p13.11 gneg chr16 16712187 21130950 p12.3 gpos50 chr16 21130950 24476520 p12.2 gneg chr16 24476520 28752507 p12.1 gpos50 chr16 28752507 35848286 p11.2 gneg chr16 35848286 36838903 p11.1 acen chr16 36838903 37829521 q11.1 acen chr16 37829521 52219471 q11.2 gvar chr16 52219471 58397876 q12.1 gneg chr16 58397876 61794998 q12.2 gpos50 chr16 61794998 63095972 q13 gneg chr16 63095972 72394295 q21 gpos100 chr16 72394295 76611172 q22.1 gneg chr16 76611172 78617811 q22.2 gpos50 chr16 78617811 79917729 q22.3 gneg chr16 79917729 85256228 q23.1 gpos75 chr16 85256228 87661662 q23.2 gneg chr16 87661662 90166083 q23.3 gpos50 chr16 90166083 93070234 q24.1 gneg chr16 93070234 94769136 q24.2 gpos25 chr16 94769136 96330374 q24.3 gneg chr17 0 3288940 p13.3 gneg chr17 3288940 6400012 p13.2 gpos50 chr17 6400012 10707908 p13.1 gneg chr17 10707908 16002309 p12 gpos75 chr17 16002309 23892419 p11.2 gneg chr17 23892419 25689679 p11.1 acen chr17 25689679 27486939 q11.1 acen chr17 27486939 34446012 q11.2 gneg chr17 34446012 40663561 q12 gpos50 chr17 40663561 41063885 q21.1 gneg chr17 41063885 43657141 q21.2 gpos25 chr17 43657141 47661458 q21.31 gneg chr17 47661458 50163080 q21.32 gpos25 chr17 50163080 52967757 q21.33 gneg chr17 52967757 60368167 q22 gpos75 chr17 60368167 61068949 q23.1 gneg chr17 61068949 63970246 q23.2 gpos75 chr17 63970246 65469760 q23.3 gneg chr17 65469760 67070785 q24.1 gpos50 chr17 67070785 69976574 q24.2 gneg chr17 69976574 73787784 q24.3 gpos75 chr17 73787784 77692007 q25.1 gneg chr17 77692007 78093613 q25.2 gpos25 chr17 78093613 84276897 q25.3 gneg chr18 0 3055502 p11.32 gneg chr18 3055502 7363114 p11.31 gpos50 chr18 7363114 8663156 p11.23 gneg chr18 8663156 11062106 p11.22 gpos25 chr18 11062106 15965699 p11.21 gneg chr18 15965699 18449624 p11.1 acen chr18 18449624 20933550 q11.1 acen chr18 20933550 27694024 q11.2 gneg chr18 27694024 35291319 q12.1 gpos100 chr18 35291319 39695477 q12.2 gneg chr18 39695477 46090953 q12.3 gpos75 chr18 46090953 50901745 q21.1 gneg chr18 50901745 56402692 q21.2 gpos75 chr18 56402692 58801152 q21.31 gneg chr18 58801152 61503246 q21.32 gpos50 chr18 61503246 64105093 q21.33 gneg chr18 64105093 69316653 q22.1 gpos100 chr18 69316653 71221701 q22.2 gneg chr18 71221701 75629292 q22.3 gpos25 chr18 75629292 80542538 q23 gneg chr19 0 6889318 p13.3 gneg chr19 6889318 12724341 p13.2 gpos25 chr19 12724341 13926177 p13.13 gneg chr19 13926177 16234072 p13.12 gpos25 chr19 16234072 20037734 p13.11 gneg chr19 20037734 25817676 p12 gvar chr19 25817676 27792923 p11 acen chr19 27792923 29768171 q11 acen chr19 29768171 34418519 q12 gvar chr19 34418519 37644588 q13.11 gneg chr19 37644588 40601536 q13.12 gpos25 chr19 40601536 41002157 q13.13 gneg chr19 41002157 45718957 q13.2 gpos25 chr19 45718957 47524747 q13.31 gneg chr19 47524747 50330819 q13.32 gpos25 chr19 50330819 53989630 q13.33 gneg chr19 53989630 56182556 q13.41 gpos25 chr19 56182556 58899358 q13.42 gneg chr19 58899358 61707364 q13.43 gpos25 chr20 0 5139422 p13 gneg chr20 5139422 9242915 p12.3 gpos75 chr20 9242915 12043277 p12.2 gneg chr20 12043277 17951106 p12.1 gpos75 chr20 17951106 21359369 p11.23 gneg chr20 21359369 22357561 p11.22 gpos25 chr20 22357561 26925852 p11.21 gneg chr20 26925852 28012753 p11.1 acen chr20 28012753 29099655 q11.1 acen chr20 29099655 35226553 q11.21 gneg chr20 35226553 37520975 q11.22 gpos25 chr20 37520975 40730034 q11.23 gneg chr20 40730034 44834038 q12 gpos75 chr20 44834038 45233263 q13.11 gneg chr20 45233263 49539094 q13.12 gpos25 chr20 49539094 52970605 q13.13 gneg chr20 52970605 58177493 q13.2 gpos75 chr20 58177493 59578060 q13.31 gneg chr20 59578060 61484264 q13.32 gpos50 chr20 61484264 66210255 q13.33 gneg chr21 0 3084882 p13 gvar chr21 3084882 5633495 p12 stalk chr21 5633495 10962853 p11.2 gvar chr21 10962853 11134529 p11.1 acen chr21 11134529 11306205 q11.1 acen chr21 11306205 13355188 q11.2 gneg chr21 13355188 20956835 q21.1 gpos100 chr21 20956835 23857586 q21.2 gneg chr21 23857586 28565933 q21.3 gpos75 chr21 28565933 32782056 q22.11 gneg chr21 32782056 34782581 q22.12 gpos50 chr21 34782581 36683433 q22.13 gneg chr21 36683433 39588333 q22.2 gpos50 chr21 39588333 45090682 q22.3 gneg chr22 0 4770731 p13 gvar chr22 4770731 5743502 p12 stalk chr22 5743502 12788180 p11.2 gvar chr22 12788180 14249622 p11.1 acen chr22 14249622 15711065 q11.1 acen chr22 15711065 22113480 q11.21 gneg chr22 22113480 23522872 q11.22 gpos25 chr22 23522872 25961147 q11.23 gneg chr22 25961147 29663505 q12.1 gpos50 chr22 29663505 32264007 q12.2 gneg chr22 32264007 37659920 q12.3 gpos50 chr22 37659920 41071957 q13.1 gneg chr22 41071957 44282889 q13.2 gpos50 chr22 44282889 48592476 q13.31 gneg chr22 48592476 49604335 q13.32 gpos50 chr22 49604335 51324926 q13.33 gneg chrX 0 3944795 p22.33 gneg chrX 3944795 5652276 p22.32 gpos50 chrX 5652276 9182594 p22.31 gneg chrX 9182594 16982597 p22.2 gpos50 chrX 16982597 18782737 p22.13 gneg chrX 18782737 21483312 p22.12 gpos50 chrX 21483312 24484237 p22.11 gneg chrX 24484237 28892068 p21.3 gpos100 chrX 28892068 31098156 p21.2 gneg chrX 31098156 37203573 p21.1 gpos100 chrX 37203573 41906024 p11.4 gneg chrX 41906024 47009888 p11.3 gpos75 chrX 47009888 49417662 p11.23 gneg chrX 49417662 54090881 p11.22 gpos25 chrX 54090881 57820107 p11.21 gneg chrX 57820107 59373565 p11.1 acen chrX 59373565 60927025 q11.1 acen chrX 60927025 63825591 q11.2 gneg chrX 63825591 66933457 q12 gpos50 chrX 66933457 71433508 q13.1 gneg chrX 71433508 73133628 q13.2 gpos50 chrX 73133628 75233853 q13.3 gneg chrX 75233853 83828518 q21.1 gpos100 chrX 83828518 85427981 q21.2 gneg chrX 85427981 91150234 q21.31 gpos100 chrX 91150234 92745170 q21.32 gneg chrX 92745170 97541699 q21.33 gpos75 chrX 97541699 101746979 q22.1 gneg chrX 101746979 102931146 q22.2 gpos50 chrX 102931146 107847498 q22.3 gneg chrX 107847498 115776569 q23 gpos75 chrX 115776569 120099927 q24 gneg chrX 120099927 127818782 q25 gpos100 chrX 127818782 129624103 q26.1 gneg chrX 129624103 132825159 q26.2 gpos25 chrX 132825159 137210433 q26.3 gneg chrX 137210433 139517370 q27.1 gpos75 chrX 139517370 141308643 q27.2 gneg chrX 141308643 146265526 q27.3 gpos100 chrX 146265526 154259566 q28 gneg chrY 0 127375 p11.32 gneg chrY 127375 454123 p11.31 gpos50 chrY 454123 10565750 p11.2 gneg chrY 10565750 10724418 p11.1 acen chrY 10724418 10883085 q11.1 acen chrY 10883085 13307633 q11.21 gneg chrY 13307633 18006518 q11.221 gpos50 chrY 18006518 20506564 q11.222 gneg chrY 20506564 25062557 q11.223 gpos50 chrY 25062557 27449937 q11.23 gneg chrY 27449937 62460029 q12 gvar open2c-bioframe-4fe9b25/bioframe/io/data/hs1.seqinfo.tsv000066400000000000000000000031411477525772300231260ustar00rootroot00000000000000name length role molecule unit aliases chr1 248387328 assembled chr1 primary 1,CP068277.2,NC_060925.1 chr2 242696752 assembled chr2 primary 2,CP068276.2,NC_060926.1 chr3 201105948 assembled chr3 primary 3,CP068275.2,NC_060927.1 chr4 193574945 assembled chr4 primary 4,CP068274.2,NC_060928.1 chr5 182045439 assembled chr5 primary 5,CP068273.2,NC_060929.1 chr6 172126628 assembled chr6 primary 6,CP068272.2,NC_060930.1 chr7 160567428 assembled chr7 primary 7,CP068271.2,NC_060931.1 chr8 146259331 assembled chr8 primary 8,CP068270.2,NC_060932.1 chr9 150617247 assembled chr9 primary 9,CP068269.2,NC_060933.1 chr10 134758134 assembled chr10 primary 10,CP068268.2,NC_060934.1 chr11 135127769 assembled chr11 primary 11,CP068267.2,NC_060935.1 chr12 133324548 assembled chr12 primary 12,CP068266.2,NC_060936.1 chr13 113566686 assembled chr13 primary 13,CP068265.2,NC_060937.1 chr14 101161492 assembled chr14 primary 14,CP068264.2,NC_060938.1 chr15 99753195 assembled chr15 primary 15,CP068263.2,NC_060939.1 chr16 96330374 assembled chr16 primary 16,CP068262.2,NC_060940.1 chr17 84276897 assembled chr17 primary 17,CP068261.2,NC_060941.1 chr18 80542538 assembled chr18 primary 18,CP068260.2,NC_060942.1 chr19 61707364 assembled chr19 primary 19,CP068259.2,NC_060943.1 chr20 66210255 assembled chr20 primary 20,CP068258.2,NC_060944.1 chr21 45090682 assembled chr21 primary 21,CP068257.2,NC_060945.1 chr22 51324926 assembled chr22 primary 22,CP068256.2,NC_060946.1 chrX 154259566 assembled chrX primary X,CP068255.2,NC_060947.1 chrY 62460029 assembled chrY primary Y,CP086569.2,NC_060948.1 chrM 16569 assembled chrM non-nuclear MT,CP068254.1 open2c-bioframe-4fe9b25/bioframe/io/data/mm10.seqinfo.tsv000066400000000000000000000120331477525772300232050ustar00rootroot00000000000000name length role molecule unit aliases chr1 195471971 assembled chr1 primary 1,CM000994.2,NC_000067.6 chr2 182113224 assembled chr2 primary 2,CM000995.2,NC_000068.7 chr3 160039680 assembled chr3 primary 3,CM000996.2,NC_000069.6 chr4 156508116 assembled chr4 primary 4,CM000997.2,NC_000070.6 chr5 151834684 assembled chr5 primary 5,CM000998.2,NC_000071.6 chr6 149736546 assembled chr6 primary 6,CM000999.2,NC_000072.6 chr7 145441459 assembled chr7 primary 7,CM001000.2,NC_000073.6 chr8 129401213 assembled chr8 primary 8,CM001001.2,NC_000074.6 chr9 124595110 assembled chr9 primary 9,CM001002.2,NC_000075.6 chr10 130694993 assembled chr10 primary 10,CM001003.2,NC_000076.6 chr11 122082543 assembled chr11 primary 11,CM001004.2,NC_000077.6 chr12 120129022 assembled chr12 primary 12,CM001005.2,NC_000078.6 chr13 120421639 assembled chr13 primary 13,CM001006.2,NC_000079.6 chr14 124902244 assembled chr14 primary 14,CM001007.2,NC_000080.6 chr15 104043685 assembled chr15 primary 15,CM001008.2,NC_000081.6 chr16 98207768 assembled chr16 primary 16,CM001009.2,NC_000082.6 chr17 94987271 assembled chr17 primary 17,CM001010.2,NC_000083.6 chr18 90702639 assembled chr18 primary 18,CM001011.2,NC_000084.6 chr19 61431566 assembled chr19 primary 19,CM001012.2,NC_000085.6 chrX 171031299 assembled chrX primary X,CM001013.2,NC_000086.7 chrY 91744698 assembled chrY primary Y,CM001014.2,NC_000087.7 chrM 16299 assembled chrM non-nuclear MT,AY172335.1,NC_005089.1 chr1_GL456210_random 169725 unlocalized chr1 primary GL456210.1,MMCHR1_RANDOM_CTG1,NT_166280.1 chr1_GL456211_random 241735 unlocalized chr1 primary GL456211.1,MMCHR1_RANDOM_CTG2,NT_166281.1 chr1_GL456212_random 153618 unlocalized chr1 primary GL456212.1,MMCHR1_RANDOM_CTG3,NT_166282.1 chr1_GL456213_random 39340 unlocalized chr1 primary GL456213.1,MMCHR1_RANDOM_CTG4,NT_166283.1 chr1_GL456221_random 206961 unlocalized chr1 primary GL456221.1,MMCHR1_RANDOM_CTG5,NT_162750.1 chr4_GL456216_random 66673 unlocalized chr4 primary GL456216.1,MMCHR4UN_CTG1,NT_166291.1 chr4_GL456350_random 227966 unlocalized chr4 primary GL456350.1,MMCHR4UN_CTG3,NT_166434.1 chr4_JH584292_random 14945 unlocalized chr4 primary JH584292.1,MMCHR4UN_CTG2,NT_187052.1 chr4_JH584293_random 207968 unlocalized chr4 primary JH584293.1,MMCHR4UN_CTG4,NT_187053.1 chr4_JH584294_random 191905 unlocalized chr4 primary JH584294.1,MMCHR4UN_CTG5,NT_187054.1 chr4_JH584295_random 1976 unlocalized chr4 primary JH584295.1,MMCHR4UN_CTG6,NT_187055.1 chr5_GL456354_random 195993 unlocalized chr5 primary GL456354.1,MMCHR5_RANDOM_CTG4,NT_166438.1 chr5_JH584296_random 199368 unlocalized chr5 primary JH584296.1,MMCHR5_RANDOM_CTG1,NT_187056.1 chr5_JH584297_random 205776 unlocalized chr5 primary JH584297.1,MMCHR5_RANDOM_CTG2,NT_187057.1 chr5_JH584298_random 184189 unlocalized chr5 primary JH584298.1,MMCHR5_RANDOM_CTG3,NT_187058.1 chr5_JH584299_random 953012 unlocalized chr5 primary JH584299.1,MMCHR5_RANDOM_CTG5,NT_187059.1 chr7_GL456219_random 175968 unlocalized chr7 primary GL456219.1,MMCHR7_RANDOM_CTG1,NT_166307.1 chrX_GL456233_random 336933 unlocalized chrX primary GL456233.1,MMCHRX_RANDOM_CTG2,NT_165789.2 chrY_JH584300_random 182347 unlocalized chrY primary JH584300.1,MMCHRY_CTGU1,NT_187060.1 chrY_JH584301_random 259875 unlocalized chrY primary JH584301.1,MMCHRY_CTGU2,NT_187061.1 chrY_JH584302_random 155838 unlocalized chrY primary JH584302.1,MMCHRY_CTGU3,NT_187062.1 chrY_JH584303_random 158099 unlocalized chrY primary JH584303.1,MMCHRY_CTGU4,NT_187063.1 chrUn_GL456239 40056 unplaced primary GL456239.1,MSCHRUN_CTG1,NT_166338.1 chrUn_GL456359 22974 unplaced primary GL456359.1,MSCHRUN_CTG13,NT_166443.1 chrUn_GL456360 31704 unplaced primary GL456360.1,MSCHRUN_CTG14,NT_166444.1 chrUn_GL456366 47073 unplaced primary GL456366.1,MSCHRUN_CTG21,NT_166450.1 chrUn_GL456367 42057 unplaced primary GL456367.1,MSCHRUN_CTG2,NT_166451.1 chrUn_GL456368 20208 unplaced primary GL456368.1,MSCHRUN_CTG22,NT_166452.1 chrUn_GL456370 26764 unplaced primary GL456370.1,MSCHRUN_CTG19,NT_166454.1 chrUn_GL456372 28664 unplaced primary GL456372.1,MSCHRUN_CTG16,NT_166456.1 chrUn_GL456378 31602 unplaced primary GL456378.1,MSCHRUN_CTG3,NT_166462.1 chrUn_GL456379 72385 unplaced primary GL456379.1,MSCHRUN_CTG20,NT_166463.1 chrUn_GL456381 25871 unplaced primary GL456381.1,MSCHRUN_CTG4,NT_166465.1 chrUn_GL456382 23158 unplaced primary GL456382.1,MSCHRUN_CTG5,NT_166466.1 chrUn_GL456383 38659 unplaced primary GL456383.1,MSCHRUN_CTG6,NT_166467.1 chrUn_GL456385 35240 unplaced primary GL456385.1,MSCHRUN_CTG7,NT_166469.1 chrUn_GL456387 24685 unplaced primary GL456387.1,MSCHRUN_CTG17,NT_166471.1 chrUn_GL456389 28772 unplaced primary GL456389.1,MSCHRUN_CTG18,NT_166473.1 chrUn_GL456390 24668 unplaced primary GL456390.1,MSCHRUN_CTG9,NT_166474.1 chrUn_GL456392 23629 unplaced primary GL456392.1,MSCHRUN_CTG10,NT_166476.1 chrUn_GL456393 55711 unplaced primary GL456393.1,MSCHRUN_CTG11,NT_166477.1 chrUn_GL456394 24323 unplaced primary GL456394.1,MSCHRUN_CTG12,NT_166478.1 chrUn_GL456396 21240 unplaced primary GL456396.1,MSCHRUN_CTG15,NT_166480.1 chrUn_JH584304 114452 unplaced primary JH584304.1,MSCHRUN_CTG23,NT_187064.1 open2c-bioframe-4fe9b25/bioframe/io/data/mm39.seqinfo.tsv000066400000000000000000000113011477525772300232150ustar00rootroot00000000000000name length role molecule unit aliases chr1 195154279 assembled chr1 primary 1,CM000994.3,NC_000067.7 chr2 181755017 assembled chr2 primary 2,CM000995.3,NC_000068.8 chr3 159745316 assembled chr3 primary 3,CM000996.3,NC_000069.7 chr4 156860686 assembled chr4 primary 4,CM000997.3,NC_000070.7 chr5 151758149 assembled chr5 primary 5,CM000998.3,NC_000071.7 chr6 149588044 assembled chr6 primary 6,CM000999.3,NC_000072.7 chr7 144995196 assembled chr7 primary 7,CM001000.3,NC_000073.7 chr8 130127694 assembled chr8 primary 8,CM001001.3,NC_000074.7 chr9 124359700 assembled chr9 primary 9,CM001002.3,NC_000075.7 chr10 130530862 assembled chr10 primary 10,CM001003.3,NC_000076.7 chr11 121973369 assembled chr11 primary 11,CM001004.3,NC_000077.7 chr12 120092757 assembled chr12 primary 12,CM001005.3,NC_000078.7 chr13 120883175 assembled chr13 primary 13,CM001006.3,NC_000079.7 chr14 125139656 assembled chr14 primary 14,CM001007.3,NC_000080.7 chr15 104073951 assembled chr15 primary 15,CM001008.3,NC_000081.7 chr16 98008968 assembled chr16 primary 16,CM001009.3,NC_000082.7 chr17 95294699 assembled chr17 primary 17,CM001010.3,NC_000083.7 chr18 90720763 assembled chr18 primary 18,CM001011.3,NC_000084.7 chr19 61420004 assembled chr19 primary 19,CM001012.3,NC_000085.7 chrX 169476592 assembled chrX primary X,CM001013.3,NC_000086.8 chrY 91455967 assembled chrY primary Y,CM001014.3,NC_000087.8 chrM 16299 assembled chrM non-nuclear MT,AY172335.1,NC_005089.1 chr1_GL456210v1_random 169725 unlocalized chr1 primary GL456210.1,MMCHR1_RANDOM_CTG1,NT_166280.1 chr1_GL456211v1_random 241735 unlocalized chr1 primary GL456211.1,MMCHR1_RANDOM_CTG2,NT_166281.1 chr1_GL456212v1_random 153618 unlocalized chr1 primary GL456212.1,MMCHR1_RANDOM_CTG3,NT_166282.1 chr1_GL456221v1_random 206961 unlocalized chr1 primary GL456221.1,MMCHR1_RANDOM_CTG5,NT_162750.1 chr1_GL456239v1_random 40056 unlocalized chr1 primary GL456239.1,MMCHR1_RANDOM_CTG7,NT_166338.1 chr1_MU069434v1_random 8412 unlocalized chr1 primary MMCHR1_RANDOM_CTG6,MU069434.1,NW_023337853.1 chr4_JH584295v1_random 1976 unlocalized chr4 primary JH584295.1,MMCHR4UN_CTG6,NT_187055.1 chr5_GL456354v1_random 195993 unlocalized chr5 primary GL456354.1,MMCHR5_RANDOM_CTG4,NT_166438.1 chr5_JH584296v1_random 199368 unlocalized chr5 primary JH584296.1,MMCHR5_RANDOM_CTG1,NT_187056.1 chr5_JH584297v1_random 205776 unlocalized chr5 primary JH584297.1,MMCHR5_RANDOM_CTG2,NT_187057.1 chr5_JH584298v1_random 184189 unlocalized chr5 primary JH584298.1,MMCHR5_RANDOM_CTG3,NT_187058.1 chr5_JH584299v1_random 953012 unlocalized chr5 primary JH584299.1,MMCHR5_RANDOM_CTG5,NT_187059.1 chr7_GL456219v1_random 175968 unlocalized chr7 primary GL456219.1,MMCHR7_RANDOM_CTG1,NT_166307.1 chrX_GL456233v2_random 559103 unlocalized chrX primary GL456233.2,MMCHRX_RANDOM_CTG2,NT_165789.3 chrY_JH584300v1_random 182347 unlocalized chrY primary JH584300.1,MMCHRY_CTGU1,NT_187060.1 chrY_JH584301v1_random 259875 unlocalized chrY primary JH584301.1,MMCHRY_CTGU2,NT_187061.1 chrY_JH584302v1_random 155838 unlocalized chrY primary JH584302.1,MMCHRY_CTGU3,NT_187062.1 chrY_JH584303v1_random 158099 unlocalized chrY primary JH584303.1,MMCHRY_CTGU4,NT_187063.1 chrUn_GL456359v1 22974 unplaced primary GL456359.1,MSCHRUN_CTG13,NT_166443.1 chrUn_GL456360v1 31704 unplaced primary GL456360.1,MSCHRUN_CTG14,NT_166444.1 chrUn_GL456366v1 47073 unplaced primary GL456366.1,MSCHRUN_CTG21,NT_166450.1 chrUn_GL456367v1 42057 unplaced primary GL456367.1,MSCHRUN_CTG2,NT_166451.1 chrUn_GL456368v1 20208 unplaced primary GL456368.1,MSCHRUN_CTG22,NT_166452.1 chrUn_GL456370v1 26764 unplaced primary GL456370.1,MSCHRUN_CTG19,NT_166454.1 chrUn_GL456372v1 28664 unplaced primary GL456372.1,MSCHRUN_CTG16,NT_166456.1 chrUn_GL456378v1 31602 unplaced primary GL456378.1,MSCHRUN_CTG3,NT_166462.1 chrUn_GL456379v1 72385 unplaced primary GL456379.1,MSCHRUN_CTG20,NT_166463.1 chrUn_GL456381v1 25871 unplaced primary GL456381.1,MSCHRUN_CTG4,NT_166465.1 chrUn_GL456382v1 23158 unplaced primary GL456382.1,MSCHRUN_CTG5,NT_166466.1 chrUn_GL456383v1 38659 unplaced primary GL456383.1,MSCHRUN_CTG6,NT_166467.1 chrUn_GL456385v1 35240 unplaced primary GL456385.1,MSCHRUN_CTG7,NT_166469.1 chrUn_GL456387v1 24685 unplaced primary GL456387.1,MSCHRUN_CTG17,NT_166471.1 chrUn_GL456389v1 28772 unplaced primary GL456389.1,MSCHRUN_CTG18,NT_166473.1 chrUn_GL456390v1 24668 unplaced primary GL456390.1,MSCHRUN_CTG9,NT_166474.1 chrUn_GL456392v1 23629 unplaced primary GL456392.1,MSCHRUN_CTG10,NT_166476.1 chrUn_GL456394v1 24323 unplaced primary GL456394.1,MSCHRUN_CTG12,NT_166478.1 chrUn_GL456396v1 21240 unplaced primary GL456396.1,MSCHRUN_CTG15,NT_166480.1 chrUn_JH584304v1 114452 unplaced primary JH584304.1,MSCHRUN_CTG23,NT_187064.1 chrUn_MU069435v1 31129 unplaced primary MU069435.1,MSCHRUN_CTG24,NW_023337853.1 open2c-bioframe-4fe9b25/bioframe/io/data/mm9.seqinfo.tsv000066400000000000000000000037511477525772300231440ustar00rootroot00000000000000name length role molecule unit aliases chr1 197195432 assembled chr1 primary 1,CM000994.1,NC_000067.5 chr2 181748087 assembled chr2 primary 2,CM000995.1,NC_000068.6 chr3 159599783 assembled chr3 primary 3,CM000996.1,NC_000069.5 chr4 155630120 assembled chr4 primary 4,CM000997.1,NC_000070.5 chr5 152537259 assembled chr5 primary 5,CM000998.1,NC_000071.5 chr6 149517037 assembled chr6 primary 6,CM000999.1,NC_000072.5 chr7 152524553 assembled chr7 primary 7,CM001000.1,NC_000073.5 chr8 131738871 assembled chr8 primary 8,CM001001.1,NC_000074.5 chr9 124076172 assembled chr9 primary 9,CM001002.1,NC_000075.5 chr10 129993255 assembled chr10 primary 10,CM001003.1,NC_000076.5 chr11 121843856 assembled chr11 primary 11,CM001004.1,NC_000077.5 chr12 121257530 assembled chr12 primary 12,CM001005.1,NC_000078.5 chr13 120284312 assembled chr13 primary 13,CM001006.1,NC_000079.5 chr14 125194864 assembled chr14 primary 14,CM001007.1,NC_000080.5 chr15 103494974 assembled chr15 primary 15,CM001008.1,NC_000081.5 chr16 98319150 assembled chr16 primary 16,CM001009.1,NC_000082.5 chr17 95272651 assembled chr17 primary 17,CM001010.1,NC_000083.5 chr18 90772031 assembled chr18 primary 18,CM001011.1,NC_000084.5 chr19 61342430 assembled chr19 primary 19,CM001012.1,NC_000085.5 chrX 166650296 assembled chrX primary X,CM001013.1,NC_000086.6 chrY 15902555 assembled chrY primary Y,CM001014.1,NC_000087.6 chrM 16299 assembled chrM non-nuclear MT,AY172335.1,NC_005089.1 chr1_random 1231697 unlocalized chr1 primary chr3_random 41899 unlocalized chr3 primary chr4_random 160594 unlocalized chr4 primary chr5_random 357350 unlocalized chr5 primary chr7_random 362490 unlocalized chr7 primary chr8_random 849593 unlocalized chr8 primary chr9_random 449403 unlocalized chr9 primary chr13_random 400311 unlocalized chr13 primary chr16_random 3994 unlocalized chr16 primary chr17_random 628739 unlocalized chr17 primary chrX_random 1785075 unlocalized chrX primary chrY_random 58682461 unlocalized chrY primary chrUn_random 5900358 unplaced primary open2c-bioframe-4fe9b25/bioframe/io/data/sacCer3.seqinfo.tsv000066400000000000000000000021631477525772300237210ustar00rootroot00000000000000name length role molecule unit aliases chrI 230218 assembled chrI primary I,BK006935.2,NC_001133.9 chrII 813184 assembled chrII primary II,BK006936.2,NC_001134.8 chrIII 316620 assembled chrIII primary III,BK006937.2,NC_001135.5 chrIV 1531933 assembled chrIV primary IV,BK006938.2,NC_001136.10 chrV 576874 assembled chrV primary V,BK006939.2,NC_001137.3 chrVI 270161 assembled chrVI primary VI,BK006940.2,NC_001138.5 chrVII 1090940 assembled chrVII primary VII,BK006941.2,NC_001139.9 chrVIII 562643 assembled chrVIII primary VIII,BK006934.2,NC_001140.6 chrIX 439888 assembled chrIX primary IX,BK006942.2,NC_001141.2 chrX 745751 assembled chrX primary X,BK006943.2,NC_001142.9 chrXI 666816 assembled chrXI primary XI,BK006944.2,NC_001143.9 chrXII 1078177 assembled chrXII primary XII,BK006945.2,NC_001144.5 chrXIII 924431 assembled chrXIII primary XIII,BK006946.2,NC_001145.3 chrXIV 784333 assembled chrXIV primary XIV,BK006947.3,NC_001146.8 chrXV 1091291 assembled chrXV primary XV,BK006948.2,NC_001147.6 chrXVI 948066 assembled chrXVI primary XVI,BK006949.2,NC_001148.4 chrM 85779 assembled chrM non-nuclear MT,Mito,AJ011856.1,NC_001224.1 open2c-bioframe-4fe9b25/bioframe/io/data/wuhCor1.seqinfo.tsv000066400000000000000000000001541477525772300237640ustar00rootroot00000000000000name length role molecule unit aliases NC_045512v2 29903 assembled NC_045512 primary NC_045512.2,MN908947.3 open2c-bioframe-4fe9b25/bioframe/io/fileops.py000066400000000000000000000472741477525772300213530ustar00rootroot00000000000000import array import io import json import os import shutil import subprocess import tempfile from collections import OrderedDict from contextlib import closing import numpy as np import pandas as pd try: import bbi except ImportError: bbi = None try: import pyBigWig except ImportError: pyBigWig = None from ..core.arrops import argnatsort from ..core.stringops import parse_region from .schemas import BAM_FIELDS, SCHEMAS __all__ = [ "read_table", "read_chromsizes", "read_tabix", "read_pairix", "read_alignments", "load_fasta", "read_bigwig", "to_bigwig", "read_bigbed", "to_bigbed", ] def read_table(filepath_or, schema=None, schema_is_strict=False, **kwargs): """ Read a tab-delimited file into a data frame. Equivalent to :func:`pandas.read_table` but supports an additional `schema` argument to populate column names for common genomic formats. Parameters ---------- filepath_or : str, path object or file-like object Any valid string path is acceptable. The string could be a URL schema : str Schema to use for table column names. schema_is_strict : bool Whether to check if columns are filled with NAs. Returns ------- df : pandas.DataFrame of intervals """ kwargs.setdefault("sep", "\t") kwargs.setdefault("header", None) kwargs.setdefault("index_col", False) if isinstance(filepath_or, str) and filepath_or.endswith(".gz"): kwargs.setdefault("compression", "gzip") if schema is not None: try: kwargs.setdefault("names", SCHEMAS[schema]) except (KeyError, TypeError): if isinstance(schema, str): raise ValueError(f"TSV schema not found: '{schema}'") from None kwargs.setdefault("names", schema) df = pd.read_csv(filepath_or, **kwargs) if schema_is_strict: if (df.notna().sum(axis=0) == 0).any(): raise ValueError( "one or more columns are all NA," + " check agreement between number of fields in schema" + " and number of columns in input file" ) return df def read_chromsizes( filepath_or, filter_chroms=True, chrom_patterns=(r"^chr[0-9]+$", r"^chr[XY]$", r"^chrM$"), natsort=True, as_bed=False, **kwargs, ): """ Read a ``.chrom.sizes`` or ``.chromInfo.txt`` file from the UCSC database, where ``db`` is a genome assembly name, as a `pandas.Series`. Parameters ---------- filepath_or : str or file-like Path or url to text file, or buffer. filter_chroms : bool, optional Filter for chromosome names given in ``chrom_patterns``. chrom_patterns : sequence, optional Sequence of regular expressions to capture desired sequence names. natsort : bool, optional Sort each captured group of names in natural order. Default is True. as_bed : bool, optional If True, return chromsizes as an interval dataframe (chrom, start, end). **kwargs : Passed to :func:`pandas.read_csv` Returns ------- Series of integer bp lengths indexed by sequence name or an interval dataframe. Notes ----- Mention name patterns See also -------- * UCSC assembly terminology: * NCBI assembly terminology: """ if isinstance(filepath_or, str) and filepath_or.endswith(".gz"): kwargs.setdefault("compression", "gzip") chromtable = pd.read_csv( filepath_or, sep="\t", usecols=[0, 1], names=["name", "length"], dtype={"name": str}, **kwargs, ) if filter_chroms: parts = [] for pattern in chrom_patterns: if not len(pattern): continue part = chromtable[chromtable["name"].str.contains(pattern)] if natsort: part = part.iloc[argnatsort(part["name"])] parts.append(part) chromtable = pd.concat(parts, axis=0) if as_bed: chromtable["start"] = 0 chromtable = ( chromtable[["name", "start", "length"]] .rename({"name": "chrom", "length": "end"}, axis="columns") .reset_index(drop=True) ) else: chromtable.index = chromtable["name"].values chromtable = chromtable["length"] return chromtable def read_tabix(fp, chrom=None, start=None, end=None): """ Read a tabix-indexed file into dataFrame. """ try: import pysam except ImportError: raise ImportError("pysam is required to use `read_tabix`") from None with closing(pysam.TabixFile(fp)) as f: names = list(f.header) or None df = pd.read_csv( io.StringIO("\n".join(f.fetch(chrom, start, end))), sep="\t", header=None, names=names, ) return df def read_pairix( fp, region1, region2=None, chromsizes=None, columns=None, usecols=None, dtypes=None, **kwargs, ): """ Read a pairix-indexed file into DataFrame. """ import cytoolz as toolz import pypairix if dtypes is None: dtypes = {} f = pypairix.open(fp, "r") header = f.get_header() if len(header): header_groups = toolz.groupby(lambda x: x.split(":")[0], header) if "#chromsize" in header_groups and chromsizes is None: items = [line.split()[1:] for line in header_groups["#chromsize"]] if len(items) and chromsizes is None: names, lengths = zip(*((item[0], int(item[1])) for item in items)) chromsizes = pd.Series(index=names, data=lengths) if "#columns" in header_groups and columns is None: columns = header_groups["#columns"][0].split()[1:] chrom1, start1, end1 = parse_region(region1, chromsizes) if region2 is not None: chrom2, start2, end2 = parse_region(region2, chromsizes) else: chrom2, start2, end2 = chrom1, start1, end1 it = f.query2D(chrom1, start1, end1, chrom2, start2, end2) if usecols is not None: argusecols = [columns.index(col) for col in usecols] records = [(record[i] for i in argusecols) for record in it] columns = usecols else: records = it df = pd.DataFrame.from_records(records, columns=columns) if columns is not None: for col in columns: if col in dtypes: df[col] = df[col].astype(dtypes[col]) else: df[col] = pd.to_numeric(df[col], "ignore") return df def read_alignments(fp, chrom=None, start=None, end=None): """ Read alignment records into a DataFrame. """ try: import pysam except ImportError: raise ImportError("pysam is required to use `read_alignments`") from None ext = os.path.splitext(fp)[1] if ext == ".sam": mode = "r" elif ext == ".bam": mode = "rb" elif ext == ".cram": mode = "rc" else: raise ValueError(f"{ext} is not a supported filetype") with closing(pysam.AlignmentFile(fp, mode)) as f: records = [] for s in f.fetch(chrom, start, end): # Needed because array.array is not json serializable tags = [ (k, v.tolist() if isinstance(v, array.array) else v) for k, v in s.tags ] records.append( ( s.qname, s.flag, s.reference_name, s.pos, s.mapq, s.cigarstring if s.mapq != 0 else np.nan, s.rnext, s.pnext, s.tlen, s.seq, s.qual, json.dumps(dict(tags)), ) ) df = pd.DataFrame(records, columns=BAM_FIELDS) return df def read_bam(fp, chrom=None, start=None, end=None): """ Deprecated: use `read_alignment` instead. Read bam file into dataframe, """ return read_alignments(fp, chrom, start, end) class PysamFastaRecord: def __init__(self, ff, ref): self.ff = ff if ref not in ff.references: raise KeyError(f"Reference name '{ref}' not found in '{ff}'") self.ref = ref def __getitem__(self, key): if isinstance(key, slice): start, stop = key.start, key.stop else: start = key stop = key + 1 return self.ff.fetch(self.ref, start, stop) def load_fasta(filepath_or, engine="pysam", **kwargs): """ Load lazy fasta sequences from an indexed fasta file (optionally compressed) or from a collection of uncompressed fasta files. Parameters ---------- filepath_or : str or iterable If a string, a filepath to a single `.fa` or `.fa.gz` file. Assumed to be accompanied by a `.fai` index file. Depending on the engine, the index may be created on the fly, and some compression formats may not be supported. If not a string, an iterable of fasta file paths each assumed to contain a single sequence. engine : {'pysam', 'pyfaidx'}, optional Module to use for loading sequences. kwargs : optional Options to pass to ``pysam.FastaFile`` or ``pyfaidx.Fasta``. Returns ------- OrderedDict of (lazy) fasta records. Notes ----- * pysam/samtools can read .fai and .gzi indexed files, I think. * pyfaidx can handle uncompressed and bgzf compressed files. """ is_multifile = not isinstance(filepath_or, str) records = OrderedDict() engine = engine.lower() if engine == "pysam": try: import pysam except ImportError: raise ImportError("pysam is required to use engine='pysam'") from None if is_multifile: for onefile in filepath_or: ff = pysam.FastaFile(onefile, **kwargs) name = ff.references[0] records[name] = PysamFastaRecord(ff, name) else: ff = pysam.FastaFile(filepath_or, **kwargs) for name in ff.references: records[name] = PysamFastaRecord(ff, name) elif engine == "pyfaidx": try: import pyfaidx except ImportError: raise ImportError("pyfaidx is required to use engine='pyfaidx'") from None if is_multifile: for onefile in filepath_or: ff = pyfaidx.Fasta(onefile, **kwargs) name = next(iter(ff.keys())) records[name] = ff[name] else: ff = pyfaidx.Fasta(filepath_or, **kwargs) for name in ff.keys(): records[name] = ff[name] else: raise ValueError("engine must be 'pysam' or 'pyfaidx'") return records def read_bigwig(path, chrom, start=None, end=None, engine="auto"): """ Read intervals from a bigWig file. Parameters ---------- path : str Path or URL to a bigWig file chrom : str start, end : int, optional Start and end coordinates. Defaults to 0 and chromosome length. engine : {"auto", "pybbi", "pybigwig"} Library to use for querying the bigWig file. Returns ------- DataFrame """ engine = engine.lower() if engine == "auto": if bbi is None and pyBigWig is None: raise ImportError( "read_bigwig requires either the pybbi or pyBigWig package" ) elif bbi is not None: engine = "pybbi" else: engine = "pybigwig" if engine in ("pybbi", "bbi"): if start is None: start = 0 if end is None: end = -1 with bbi.open(path) as f: df = f.fetch_intervals(chrom, start=start, end=end) elif engine == "pybigwig": f = pyBigWig.open(path) if start is None: start = 0 if end is None: end = f.chroms()[chrom] ivals = f.intervals(chrom, start, end) df = pd.DataFrame(ivals, columns=["start", "end", "value"]) df.insert(0, "chrom", chrom) else: raise ValueError(f"engine must be 'auto', 'pybbi' or 'pybigwig'; got {engine}") return df def read_bigbed(path, chrom, start=None, end=None, engine="auto"): """ Read intervals from a bigBed file. Parameters ---------- path : str Path or URL to a bigBed file chrom : str start, end : int, optional Start and end coordinates. Defaults to 0 and chromosome length. engine : {"auto", "pybbi", "pybigwig"} Library to use for querying the bigBed file. Returns ------- DataFrame """ engine = engine.lower() if engine == "auto": if bbi is None and pyBigWig is None: raise ImportError( "read_bigbed requires either the pybbi or pyBigWig package" ) elif bbi is not None: engine = "pybbi" else: engine = "pybigwig" if engine in ("pybbi", "bbi"): if start is None: start = 0 if end is None: end = -1 with bbi.open(path) as f: df = f.fetch_intervals(chrom, start=start, end=end) elif engine == "pybigwig": f = pyBigWig.open(path) if start is None: start = 0 if end is None: end = f.chroms()[chrom] ivals = f.entries(chrom, start, end) df = pd.DataFrame(ivals, columns=["start", "end", "rest"]) df.insert(0, "chrom", chrom) else: raise ValueError(f"engine must be 'auto', 'pybbi' or 'pybigwig'; got {engine}") return df def _find_ucsc_binary(path, cmd): if path is None: try: assert shutil.which(cmd) is not None except Exception: raise ValueError( f"{cmd} is not present in the current environment. " f"Pass it as 'path_to_binary' parameter to bioframe.to_bigwig or " f"install it with, for example, conda install -y -c bioconda " f"ucsc-{cmd.lower()} " ) from None elif path.endswith(cmd): if not os.path.isfile(path) and os.access(path, os.X_OK): raise ValueError( f"{cmd} is absent in the provided path or cannot be " f"executed: {path}. " ) cmd = path else: cmd = os.path.join(path, cmd) if not os.path.isfile(cmd) and os.access(cmd, os.X_OK): raise ValueError( f"{cmd} is absent in the provided path or cannot be " f"executed: {path}. " ) return cmd def to_bigwig( df, chromsizes, outpath, value_field=None, engine="ucsc", path_to_binary=None ): """Save a bedGraph-like dataframe as a binary BigWig file. Parameters ---------- df : pandas.DataFrame Data frame with columns 'chrom', 'start', 'end' and one or more value columns chromsizes : pandas.Series Series indexed by chromosome name mapping to their lengths in bp outpath : str The output BigWig file path value_field : str, optional Select the column label of the data frame to generate the track. Default is to use the fourth column. path_to_binary : str, optional Provide system path to the bedGraphToBigWig binary. engine : {'ucsc', 'bigtools'}, optional Engine to use for creating the BigWig file. """ is_bedgraph = True for col in ["chrom", "start", "end"]: if col not in df.columns: is_bedgraph = False if len(df.columns) < 4: is_bedgraph = False if not is_bedgraph: raise ValueError(f"A bedGraph-like DataFrame is required, got {df.columns}") if value_field is None: value_field = df.columns[3] columns = ["chrom", "start", "end", value_field] bg = df[columns].copy() bg["chrom"] = bg["chrom"].astype(str) bg = bg.sort_values(["chrom", "start", "end"]) if engine.lower() == "ucsc": cmd = _find_ucsc_binary(path_to_binary, "bedGraphToBigWig") with tempfile.NamedTemporaryFile(suffix=".bg") as f, \ tempfile.NamedTemporaryFile("wt", suffix=".chrom.sizes") as cs: # fmt: skip # noqa: E501 pd.Series(chromsizes).to_csv(cs, sep="\t", header=False) cs.flush() bg.to_csv( f.name, sep="\t", columns=columns, index=False, header=False, na_rep="nan", ) p = subprocess.run( [cmd, f.name, cs.name, outpath], capture_output=True, ) return p elif engine.lower() == "bigtools": try: import pybigtools except ImportError: raise ImportError( "pybigtools is required to use engine='bigtools'" ) from None f = pybigtools.open(outpath, "w") if issubclass(type(chromsizes), pd.Series): chromsizes = chromsizes.astype(int).to_dict() bg = bg.astype({"chrom": str, "start": int, "end": int, value_field: float}) f.write(chroms=chromsizes, vals=bg.itertuples(index=False)) f.close() def to_bigbed( df, chromsizes, outpath, schema="infer", engine="ucsc", path_to_binary=None ): """Save a BED-like dataframe as a binary BigBed file. Parameters ---------- df : pandas.DataFrame Data frame with columns 'chrom', 'start', 'end' and one or more value columns chromsizes : pandas.Series Series indexed by chromosome name mapping to their lengths in bp outpath : str The output BigWig file path value_field : str, optional Select the column label of the data frame to generate the track. Default is to use the fourth column. path_to_binary : str, optional Provide system path to the bedToBigBed binary. """ from bioframe.io.bed import infer_bed_schema, parse_bed_schema, to_bed_dataframe if schema == "infer": n, _ = infer_bed_schema(df) else: n, _ = parse_bed_schema(schema) bed = to_bed_dataframe(df, schema=schema) m = len(bed.columns) - n schema = f"bed{n}+{m}" if m > 0 else f"bed{n}" if engine.lower() == "ucsc": if path_to_binary is None: cmd = _find_ucsc_binary(path_to_binary, "bedToBigBed") with tempfile.NamedTemporaryFile(suffix=".bed") as f, \ tempfile.NamedTemporaryFile("wt", suffix=".chrom.sizes") as cs: # fmt: skip # noqa: E501 pd.Series(chromsizes).to_csv(cs, sep="\t", header=False) cs.flush() bed.to_csv( f.name, sep="\t", columns=bed.columns, index=False, header=False, na_rep="nan", ) p = subprocess.run( [cmd, f"-type={schema}", f.name, cs.name, outpath], capture_output=True, ) return p elif engine.lower() == "bigtools": try: import pybigtools except ImportError: raise ImportError( "pybigtools is required to use engine='bigtools'" ) from None f = pybigtools.open(outpath, "w") if issubclass(type(chromsizes), pd.Series): chromsizes = chromsizes.astype(int).to_dict() bed = bed.astype({"chrom": str, "start": int, "end": int}) record_iter = ( (row[0], row[1], row[2], "\t".join(str(x) for x in row[3:])) for row in bed.itertuples(index=False) ) f.write(chroms=chromsizes, vals=record_iter) f.close() open2c-bioframe-4fe9b25/bioframe/io/resources.py000066400000000000000000000207041477525772300217110ustar00rootroot00000000000000import urllib from functools import partial from typing import Union from urllib.parse import urljoin import numpy as np import pandas as pd from .assembly import assembly_info from .fileops import read_chromsizes, read_table from .schemas import SCHEMAS __all__ = [ "fetch_chromsizes", "fetch_centromeres", "UCSCClient", ] def fetch_chromsizes( db: str, *, provider: str = "local", as_bed: bool = False, filter_chroms: bool = True, chrom_patterns: tuple = (r"^chr[0-9]+$", r"^chr[XY]$", r"^chrM$"), natsort: bool = True, **kwargs, ) -> Union[pd.Series, pd.DataFrame]: """ Fetch chromsizes from local storage or the UCSC database. Parameters ---------- db : str Assembly name. provider : str, optional [default: "local"] The provider of chromsizes. Either "local" for local storage or "ucsc". as_bed : bool, optional If True, return chromsizes as an interval DataFrame (chrom, start, end) instead of a Series. The remaining options only apply to provider="ucsc". filter_chroms : bool, optional Filter for chromosome names given in ``chrom_patterns``. chrom_patterns : sequence, optional Sequence of regular expressions to capture desired sequence names. natsort : bool, optional Sort each captured group of names in natural order. Default is True. **kwargs : Passed to :func:`pandas.read_csv` Returns ------- Series of integer bp lengths indexed by sequence name or BED3 DataFrame. Notes ----- For more fine-grained control over the chromsizes from local storage, use :func:`bioframe.assembly_info`. Examples -------- >>> fetch_chromsizes("hg38") name chr1 248956422 chr2 242193529 chr3 198295559 ... ... chrX 156040895 chrY 57227415 chrM 16569 Name: length, dtype: int64 >>> fetch_chromsizes("hg38", as_bed=True) chrom start end 0 chr1 0 248956422 1 chr2 0 242193529 2 chr3 0 198295559 ... ... 21 chrX 0 156040895 22 chrY 0 57227415 23 chrM 0 16569 See also -------- bioframe.assembly_info bioframe.UCSCClient """ if provider == "local": assembly = assembly_info(db) if as_bed: return assembly.viewframe[["chrom", "start", "end"]].copy() else: return assembly.chromsizes elif provider == "ucsc": return UCSCClient(db).fetch_chromsizes( filter_chroms=filter_chroms, chrom_patterns=chrom_patterns, natsort=natsort, as_bed=as_bed, **kwargs, ) else: raise ValueError(f"Unknown provider '{provider}'") def _origins_from_cytoband( cyb: pd.DataFrame, band_col: str = "gieStain" ) -> pd.DataFrame: """ Extract chromosomal origin positions separating chromosome arms from cytological band data. Takes the cytological origin, i.e. the boundary between the two bands labeled 'acen'. Parameters ---------- cyb : pandas.DataFrame DataFrame with cytoband data. Returns ------- pandas.DataFrame A dataframe with columns 'chrom', 'start', 'end', 'mid'. """ cyb = cyb[cyb[band_col] == "acen"] grouped = cyb.groupby("chrom", sort=False) cens = [] for chrom, group in grouped: if not len(group) == 2: raise ValueError(f"Expected 2 'acen' bands for {chrom}, found {len(group)}") acens = group.sort_values("start") cens.append( { "chrom": chrom, "start": acens.iloc[0]["start"], "end": acens.iloc[1]["end"], "mid": acens.iloc[0]["end"], } ) return pd.DataFrame.from_records(cens) def _origins_from_ucsccentromeres(cens: pd.DataFrame) -> pd.DataFrame: """ Extract chromosomal origin positions from UCSC centromeres.txt table describing centromere model sequences. Takes the midpoint of all modeled centromere sequences. Parameters ---------- cens : pandas.DataFrame DataFrame with centromeres.txt data. Returns ------- pandas.DataFrame A dataframe with columns 'chrom', 'start', 'end', 'mid'. """ cens = cens.groupby("chrom").agg({"start": np.min, "end": np.max}).reset_index() cens["mid"] = (cens["start"] + cens["end"]) // 2 cens = ( cens[["chrom", "start", "end", "mid"]] .sort_values("chrom") .reset_index(drop=True) ) return cens def fetch_centromeres(db: str, provider: str = "local") -> pd.DataFrame: """ Extract centromere locations for a given assembly 'db' from a variety of file formats in UCSC (cytoband, centromeres) depending on availability, returning a DataFrame. Parameters ---------- db : str Assembly name. provider : str, optional [default: "local"] The provider of centromere data. Either "local" for local storage or "ucsc". Returns ------- DataFrame with centromere 'chrom', 'start', 'end', 'mid'. Notes ----- When provider="local", centromeres are derived from cytoband tables in local storage. Whe provider="ucsc", the fallback priority goes as follows: - UCSC cytoBand - UCSC cytoBandIdeo - UCSC centromeres.txt Note that UCSC "gap" files no longer provide centromere information. Currently only works for human assemblies. See also -------- bioframe.assembly_info bioframe.UCSCClient """ if provider == "local": assembly = assembly_info(db) cyb = assembly.cytobands if cyb is None: raise ValueError( f"No source for centromere data found from provider '{provider}'." ) return _origins_from_cytoband(cyb, band_col="stain") elif provider == "ucsc": client = UCSCClient(db) fetchers = [ ("cytoband", client.fetch_cytoband), ("cytoband", partial(client.fetch_cytoband, ideo=True)), ("centromeres", client.fetch_centromeres), ] for schema, fetcher in fetchers: # noqa: B007 try: df = fetcher() break except urllib.error.HTTPError: pass else: raise ValueError( f"No source for centromere data found from provider '{provider}'." ) if schema == "centromeres": return _origins_from_ucsccentromeres(df) else: return _origins_from_cytoband(df) else: raise ValueError(f"Unknown provider '{provider}'") class UCSCClient: BASE_URL = "https://hgdownload.soe.ucsc.edu/" def __init__(self, db: str): self._db = db self._db_url = urljoin(self.BASE_URL, f"goldenPath/{db}/") def fetch_chromsizes( self, filter_chroms: bool = True, chrom_patterns: tuple = (r"^chr[0-9]+$", r"^chr[XY]$", r"^chrM$"), natsort: bool = True, as_bed: bool = False, **kwargs, ) -> Union[pd.Series, pd.DataFrame]: url = urljoin(self._db_url, f"bigZips/{self._db}.chrom.sizes") return read_chromsizes( url, filter_chroms=filter_chroms, chrom_patterns=chrom_patterns, natsort=natsort, as_bed=as_bed, **kwargs, ) def fetch_centromeres(self, **kwargs) -> pd.DataFrame: url = urljoin(self._db_url, "database/centromeres.txt.gz") return read_table(url, schema="centromeres", **kwargs) def fetch_gaps(self, **kwargs): url = urljoin(self._db_url, "database/gap.txt.gz") return read_table( url, schema="gap", usecols=["chrom", "start", "end", "length", "type", "bridge"], **kwargs, ) def fetch_cytoband(self, ideo: bool = False, **kwargs) -> pd.DataFrame: if ideo: url = urljoin(self._db_url, "database/cytoBandIdeo.txt.gz") else: url = urljoin(self._db_url, "database/cytoBand.txt.gz") return read_table(url, schema="cytoband") def fetch_mrna(self, **kwargs) -> pd.DataFrame: url = urljoin(self._db_url, "database/all_mrna.txt.gz") return read_table( url, schema=SCHEMAS["all_mrna"], **kwargs, ) open2c-bioframe-4fe9b25/bioframe/io/schemas.py000066400000000000000000000121601477525772300213170ustar00rootroot00000000000000""" Field names for various genomic tabular files """ __all__ = ["SCHEMAS"] # UCSC File Formats # https://genome.ucsc.edu/FAQ/FAQformat.html BED12_FIELDS = [ "chrom", "start", "end", "name", "score", "strand", "thickStart", "thickEnd", "itemRgb", "blockCount", "blockSizes", "blockStarts", ] BED_FIELDS = BED12_FIELDS[:6] BEDGRAPH_FIELDS = ["chrom", "start", "end", "value"] BEDPE_FIELDS = [ "chrom1", "start1", "end1", "chrom2", "start2", "end2", "name", "score", "strand1", "strand2", ] GFF_FIELDS = [ "chrom", "source", "feature", "start", "end", "score", "strand", "frame", "attributes", ] PGSNP_FIELDS = [ "chrom", "start", "end", "name", "alleleCount", "alleleFreq", "alleleScores", ] BEDRNAELEMENTS_FIELDS = [ "chrom", "start", "end", "name", "score", "strand", "level", "signif", "score2", ] NARROWPEAK_FIELDS = [ "chrom", "start", "end", "name", "score", "strand", "fc", "-log10p", "-log10q", "relSummit", ] BROADPEAK_FIELDS = [ "chrom", "start", "end", "name", "score", "strand", "fc", "-log10p", "-log10q", ] GAPPEDPEAK_FIELDS = [ "chrom", "start", "end", "name", "score", "strand", "thickStart", "thickEnd", "itemRgb", "blockCount", "blockSizes", "blockStarts", "fc", "-log10p", "-log10q", ] JASPAR_FIELDS = ["chrom", "start", "end", "name", "score", "pval", "strand"] GAP_FIELDS = ["bin", "chrom", "start", "end", "ix", "n", "length", "type", "bridge"] CENTROMERES_FIELDS = ["bin", "chrom", "start", "end", "name"] UCSC_MRNA_FIELDS = [ "bin", "matches", "misMatches", "repMatches", "nCount", "qNumInsert", "qBaseInsert", "tNumInsert", "tBaseInsert", "strand", "qName", "qSize", "qStart", "qEnd", "tName", "tSize", "tStart", "tEnd", "blockCount", "blockSizes", "qStarts", "tStarts", ] CYTOBAND_FIELDS = ["chrom", "start", "end", "name", "gieStain"] # GA4GH File Formats # http://ga4gh.org/#/fileformats-team BAM_FIELDS = [ "QNAME", "FLAG", "RNAME", "POS", "MAPQ", "CIGAR", "RNEXT", "PNEXT", "TLEN", "SEQ", "QUAL", "TAGs", ] VCF_FIELDS = ["CHROM", "POS", "ID", "REF", "ALT", "QUAL", "FILTER", "INFO"] SCHEMAS = { "bed": BED_FIELDS, "bed3": BED_FIELDS[:3], "bed4": BED_FIELDS[:4], "bedGraph": BEDGRAPH_FIELDS, "bed5": BED_FIELDS[:5], "bed6": BED_FIELDS, "bed9": BED12_FIELDS[:9], "bed12": BED12_FIELDS, "bedpe": BEDPE_FIELDS, "gff": GFF_FIELDS, "gtf": GFF_FIELDS, "bedRnaElements": BEDRNAELEMENTS_FIELDS, "narrowPeak": NARROWPEAK_FIELDS, "broadPeak": BROADPEAK_FIELDS, "gappedPeak": GAPPEDPEAK_FIELDS, "centromeres": CENTROMERES_FIELDS, "cytoband": CYTOBAND_FIELDS, "sam": BAM_FIELDS, "vcf": VCF_FIELDS, "jaspar": JASPAR_FIELDS, "gap": GAP_FIELDS, "all_mrna": UCSC_MRNA_FIELDS, "pgsnp": PGSNP_FIELDS, } CHROM_NAME_PATTERNS = { "hg19": ( r"^chr[0-9]+$", r"^chr[XY]$", r"^chrM$", r"^chr(?!Un).+_.*_random$", r"^chrUn_.*$", r"^chr(?!Un).+_.*_hap\d+$", ), "hg38": ( r"^chr[0-9]+$", r"^chr[XY]$", r"^chrM$", r"^chrEBV$", r"^chr(?!Un).+_.*_random$", r"^chrUn_.*$", r"^chr(?!Un).+_.*_alt$", ), "mm9": ( r"^chr[0-9]+$", r"^chr[XY]$", r"^chrM$", r"^chr(?!Un).+_random$", r"^chrUn_random$", ), "mm10": ( r"^chr[0-9]+$", r"^chr[XY]$", r"^chrM$", r"^chr(?!Un).+_random$", r"^chrUn_.*$", ), "galGal4": ( r"^chr[0-9]+$", r"^chr[ZW]$", r"^chrM$", r"^chrLGE64|chrLGE22C19W28_E50C23$", r"^chr(?!Un).+_random$", r"^chrUn_.*$", ), "galGal5": ( r"^chr[0-9]+$", r"^chr[ZW]$", r"^chrM$", r"^chrLGE64$", r"^chr(?!Un).+_random$", r"^chrUn_.*$", ), "dm3": ( r"^chr[234][LR[Het]*]*$", r"^chr[XY][Het]*$", r"^chrM$", r"^chr[U][extra]*$", ), "dm6": ( r"^chr[234][LR]*", r"^chr[XY]$", r"^chrM$", r"^chr(?!Un).+_random$", r"^chrUn_.*$", ), "ce10": (r"chr[IV]+$", r"^chrX$", r"^chrM$"), "ce11": (r"chr[IV]+$", r"^chrX$", r"^chrM$"), "sacCer3": (r"chr[IXV]+$", r"^chrM$"), "TAIR10": (r"^\d+", r"^MT|Pltd$"), } UCSC_AUTOSOMES = r"^chr[0-9]+[A-Za-z]*$" UCSC_SEXCHROMS = r"^chr[XYZW][A-Za-z]*$" UCSC_NONNUCLEAR = r"^chrM$" UCSC_OTHER = r"^chrLGE.*$" UCSC_UNLOCALIZED = r"^chr(?!Un).+.*_random$" UCSC_UNPLACED = r"^chrUn_.*$|^chrU[A-Za-z]*$" UCSC_ALTCHROMS = r"^chr(?!Un).+_.*_hap\d+$|^chr(?!Un).+_.*_alt$" NCBI_AUTOSOMES = r"^[0-9]+$" NCBI_SEXCHROMS = r"^[XYZW]$" NCBI_NONNUCLEAR = r"^MT$|^Pltd$" ROMAN_LT10 = [r"^chrI+$", r"^chrIV$", r"^chrVI*$", r"^chrIX$"] ROMAN_LT20 = [*ROMAN_LT10, "^chrX$", "^chrXI*$", "^chrXIV$", "^chrXVI*$", "^chrXIX$"] open2c-bioframe-4fe9b25/bioframe/ops.py000066400000000000000000001707751477525772300201070ustar00rootroot00000000000000import numpy as np import pandas as pd from .core import arrops, checks, construction from .core.specs import _get_default_colnames, _verify_columns from .core.stringops import parse_region __all__ = [ "select", "select_mask", "select_indices", "select_labels", "expand", "overlap", "cluster", "merge", "coverage", "closest", "subtract", "setdiff", "count_overlaps", "trim", "complement", "sort_bedframe", "assign_view", ] def select_mask(df, region, cols=None): """ Return boolean mask for all genomic intervals that overlap a query range. Parameters ---------- df : pandas.DataFrame region : str or tuple The genomic region to select from the dataframe in UCSC-style genomic region string, or triple (chrom, start, end). cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals. The default values are 'chrom', 'start', 'end'. Returns ------- Boolean array of shape (len(df),) """ ck, sk, ek = _get_default_colnames() if cols is None else cols _verify_columns(df, [ck, sk, ek]) chrom, start, end = parse_region(region) if chrom is None: raise ValueError("no chromosome detected, check region input") if start is None: mask = df[ck] == chrom else: if end is None: end = np.inf mask = (df[ck] == chrom) & ( ((df[sk] < end) & (df[ek] > start)) | ((df[sk] == df[ek]) & (df[sk] == start)) # include points at query start ) return mask.to_numpy() def select_indices(df, region, cols=None): """ Return integer indices of all genomic intervals that overlap a query range. Parameters ---------- df : pandas.DataFrame region : str or tuple The genomic region to select from the dataframe in UCSC-style genomic region string, or triple (chrom, start, end). cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals. The default values are 'chrom', 'start', 'end'. Returns ------- 1D array of int """ return np.nonzero(select_mask(df, region, cols))[0] def select_labels(df, region, cols=None): """ Return pandas Index labels of all genomic intervals that overlap a query range. Parameters ---------- df : pandas.DataFrame region : str or tuple The genomic region to select from the dataframe in UCSC-style genomic region string, or triple (chrom, start, end). cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals. The default values are 'chrom', 'start', 'end'. Returns ------- pandas.Index """ return df.index[select_mask(df, region, cols)] def select(df, region, cols=None): """ Return all genomic intervals in a dataframe that overlap a genomic region. Parameters ---------- df : pandas.DataFrame region : str or tuple The genomic region to select from the dataframe in UCSC-style genomic region string, or triple (chrom, start, end). cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals. The default values are 'chrom', 'start', 'end'. Returns ------- df : pandas.DataFrame Notes ----- See :func:`.core.stringops.parse_region()` for more information on region formatting. See also -------- :func:`select_mask` :func:`select_indices` :func:`select_labels` """ return df.loc[select_mask(df, region, cols)] def expand(df, pad=None, scale=None, side="both", cols=None): """ Expand each interval by an amount specified with `pad`. Negative values for pad shrink the interval, up to the midpoint. Multiplicative rescaling of intervals enabled with scale. Only one of pad or scale can be provided. Often followed by :func:`trim()`. Parameters ---------- df : pandas.DataFrame pad : int, optional The amount by which the intervals are additively expanded *on each side*. Negative values for pad shrink intervals, but not beyond the interval midpoint. Either `pad` or `scale` must be supplied. scale : float, optional The factor by which to scale intervals multiplicatively on each side, e.g ``scale=2`` doubles each interval, ``scale=0`` returns midpoints, and ``scale=1`` returns original intervals. Default False. Either `pad` or `scale` must be supplied. side : str, optional Which side to expand, possible values are 'left', 'right' and 'both'. Default 'both'. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals. Default values are 'chrom', 'start', 'end'. Returns ------- df_expanded : pandas.DataFrame Notes ----- See :func:`bioframe.trim` for trimming interals after expansion. """ ck, sk, ek = _get_default_colnames() if cols is None else cols checks.is_bedframe(df, raise_errors=True, cols=[ck, sk, ek]) if scale is not None and pad is not None: raise ValueError("only one of pad or scale can be supplied") elif scale is not None: if scale < 0: raise ValueError("multiplicative scale must be >=0") pads = 0.5 * (scale - 1) * (df[ek].values - df[sk].values) types = df.dtypes[[sk, ek]] elif pad is not None: if not isinstance(pad, int): raise ValueError("additive pad must be integer") pads = pad else: raise ValueError("either pad or scale must be supplied") df_expanded = df.copy() if side == "both" or side == "left": df_expanded[sk] = df[sk].values - pads if side == "both" or side == "right": df_expanded[ek] = df[ek] + pads if pad is not None: if pad < 0: mids = df[sk].values + (0.5 * (df[ek].values - df[sk].values)).astype( np.int64 ) df_expanded[sk] = np.minimum(df_expanded[sk].values, mids) df_expanded[ek] = np.maximum(df_expanded[ek].values, mids) if scale is not None: df_expanded[[sk, ek]] = df_expanded[[sk, ek]].round() df_expanded[[sk, ek]] = df_expanded[[sk, ek]].astype(types) return df_expanded def _minus(inds1, inds2, n1, n2, how): if how in {"left", "outer"} and n1 > 0: inds1_unpaired = np.setdiff1d(np.arange(n1), inds1) else: inds1_unpaired = np.array([], dtype=int) if how in {"right", "outer"} and n2 > 0: inds2_unpaired = np.setdiff1d(np.arange(n2), inds2) else: inds2_unpaired = np.array([], dtype=int) return inds1_unpaired, inds2_unpaired def _overlap_intidxs(df1, df2, how="left", cols1=None, cols2=None, on=None): """ Find pairs of overlapping genomic intervals and return the integer indices of the overlapping intervals. Parameters ---------- df1, df2 : pandas.DataFrame Two sets of genomic intervals stored as a DataFrame. how : {'left', 'right', 'outer', 'inner'}, default 'left' How to handle the overlaps on the two dataframes. left: use the set of intervals in df1 right: use the set of intervals in df2 outer: use the union of the set of intervals from df1 and df2 inner: use intersection of the set of intervals from df1 and df2 cols1, cols2 : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. on : list or None Additional shared columns to consider as separate groups. Returns ------- overlap_ids : numpy.ndarray The indices of the overlapping genomic intervals in the original dataframes. The 1st column contains the indices of intervals from the 1st set, the 2nd column - the indicies from the 2nd set. """ ck1, sk1, ek1 = _get_default_colnames() if cols1 is None else cols1 ck2, sk2, ek2 = _get_default_colnames() if cols2 is None else cols2 _verify_columns(df1, [ck1, sk1, ek1]) _verify_columns(df2, [ck2, sk2, ek2]) # Determine grouping columns. by1 = [ck1] by2 = [ck2] if on is not None: by1 += on by2 += on # Mappings of group keys to integer indices. df1_groups = df1.groupby(by1, observed=True, dropna=False).indices df2_groups = df2.groupby(by2, observed=True, dropna=False).indices group_keys = set.union(set(df1_groups), set(df2_groups)) # Extract coordinate fields as arrays. # Will produce a numpy array or pandas array, depending on the dtype. starts1 = df1[sk1].values ends1 = df1[ek1].values starts2 = df2[sk2].values ends2 = df2[ek2].values # Match groups by key and find overlapping intervals. events1 = [] events2 = [] for key in group_keys: df1_inds = df1_groups.get(key, np.array([])) df2_inds = df2_groups.get(key, np.array([])) n1 = len(df1_inds) n2 = len(df2_inds) left_nonempty = n1 > 0 right_nonempty = n2 > 0 if left_nonempty and right_nonempty: # paired pi, pj = arrops.overlap_intervals( starts1[df1_inds], ends1[df1_inds], starts2[df2_inds], ends2[df2_inds], ) # unpaired ui, uj = _minus(pi, pj, n1, n2, how) events1.append(df1_inds[pi]) events2.append(df2_inds[pj]) if len(ui) > 0: events1.append(df1_inds[ui]) events2.append(np.full(len(ui), -1)) if len(uj) > 0: events1.append(np.full(len(uj), -1)) events2.append(df2_inds[uj]) elif left_nonempty and how in {"left", "outer"}: # left all unpaired events1.append(df1_inds) events2.append(np.full(n1, -1)) elif right_nonempty and how in {"right", "outer"}: # right all unpaired events1.append(np.full(n2, -1)) events2.append(df2_inds) events1 = np.concatenate(events1) if events1 else np.array([], dtype=int) events2 = np.concatenate(events2) if events2 else np.array([], dtype=int) return events1, events2 NUMPY_INT_TO_DTYPE = { np.dtype(np.int8): pd.Int8Dtype(), np.dtype(np.int16): pd.Int16Dtype(), np.dtype(np.int32): pd.Int32Dtype(), np.dtype(np.int64): pd.Int64Dtype(), np.dtype(np.uint8): pd.UInt8Dtype(), np.dtype(np.uint16): pd.UInt16Dtype(), np.dtype(np.uint32): pd.UInt32Dtype(), np.dtype(np.uint64): pd.UInt64Dtype(), } def _to_nullable_dtype(dtype): try: dtype = np.dtype(dtype) except TypeError: return dtype return NUMPY_INT_TO_DTYPE.get(dtype, dtype) def overlap( df1, df2, how="left", return_input=True, return_index=False, return_overlap=False, suffixes=("", "_"), keep_order=None, cols1=None, cols2=None, on=None, ensure_int=True, ): """ Find pairs of overlapping genomic intervals. Parameters ---------- df1, df2 : pandas.DataFrame Two sets of genomic intervals stored as a DataFrame. how : {'left', 'right', 'outer', 'inner'}, default 'left' How to handle the overlaps on the two dataframes. left: use the set of intervals in df1 right: use the set of intervals in df2 outer: use the union of the set of intervals from df1 and df2 inner: use intersection of the set of intervals from df1 and df2 return_input : bool, optional If True, return columns from input dfs. Default True. return_index : bool, optional If True, return indicies of overlapping pairs as two new columns ('index'+suffixes[0] and 'index'+suffixes[1]). Default False. return_overlap : bool, optional If True, return overlapping intervals for the overlapping pairs as two additional columns (`overlap_start`, `overlap_end`). When `cols1` is modified, `start` and `end` are replaced accordingly. When `return_overlap` is a string, its value is used for naming the overlap columns: `return_overlap + "_start"`, `return_overlap + "_end"`. Default False. suffixes : (str, str), optional The suffixes for the columns of the two overlapped sets. keep_order : bool, optional If True and how='left', sort the output dataframe to preserve the order of the intervals in df1. Cannot be used with how='right'/'outer'/'inner'. Default True for how='left', and None otherwise. Note that it relies on sorting of index in the original dataframes, and will reorder the output by index. cols1, cols2 : (str, str, str) or None, optional The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. on : list or None, optional List of additional shared columns to consider as separate groups when considering overlaps. A common use would be passing on=['strand']. Default is None. ensure_int : bool, optional [default: True] If True, ensures that the output dataframe uses integer dtypes for start and end coordinates. This may involve converting coordinate columns to nullable types in outer joins. Default True. Returns ------- df_overlap : pandas.DataFrame Notes ----- If ``ensure_int`` is False, inner joins will preserve coordinate dtypes from the input dataframes, but outer joins will be subject to native type casting rules if missing data is introduced. For example, if `df1` uses a NumPy integer dtype for `start` and/or `end`, the output dataframe will use the same dtype after an inner join, but, due to casting rules, may produce ``float64`` after a left/right/outer join with missing data stored as ``NaN``. On the other hand, if `df1` uses Pandas nullable dtypes, the corresponding coordinate columns will preserve the same dtype in the output, with missing data stored as ``NA``. """ ck1, sk1, ek1 = _get_default_colnames() if cols1 is None else cols1 ck2, sk2, ek2 = _get_default_colnames() if cols2 is None else cols2 checks.is_bedframe(df1, raise_errors=True, cols=[ck1, sk1, ek1]) checks.is_bedframe(df2, raise_errors=True, cols=[ck2, sk2, ek2]) if (how == "left") and (keep_order is None): keep_order = True if (how != "left") and keep_order: raise ValueError("keep_order=True only allowed for how='left'") if on is not None: if not isinstance(on, list): raise ValueError("on=[] must be None or list") if (ck1 in on) or (ck2 in on): raise ValueError("on=[] should not contain chromosome colnames") _verify_columns(df1, on) _verify_columns(df2, on) events1, events2 = _overlap_intidxs( df1, df2, how=how, cols1=cols1, cols2=cols2, on=on, ) # Generate output tables. index_col = return_index if isinstance(return_index, str) else "index" index_col_1 = index_col + suffixes[0] index_col_2 = index_col + suffixes[1] df_index_1 = pd.DataFrame({index_col_1: df1.index[events1]}, dtype=pd.Int64Dtype()) df_index_2 = pd.DataFrame({index_col_2: df2.index[events2]}, dtype=pd.Int64Dtype()) df_overlap = None if return_overlap: overlap_col = return_overlap if isinstance(return_overlap, str) else "overlap" overlap_col_sk1 = overlap_col + "_" + sk1 overlap_col_ek1 = overlap_col + "_" + ek1 overlap_start = np.maximum( df1[sk1].values[events1], df2[sk2].values[events2], ) overlap_end = np.minimum( df1[ek1].values[events1], df2[ek2].values[events2], ) df_overlap = pd.DataFrame( {overlap_col_sk1: overlap_start, overlap_col_ek1: overlap_end} ) df_input_1 = None df_input_2 = None if return_input: df_input_1 = df1.iloc[events1].reset_index(drop=True) df_input_1.columns = [c + suffixes[0] for c in df_input_1.columns] if return_input: df_input_2 = df2.iloc[events2].reset_index(drop=True) df_input_2.columns = [c + suffixes[1] for c in df_input_2.columns] # Masking non-overlapping regions if using non-inner joins. if how != "inner": is_na_left = events1 == -1 is_na_right = events2 == -1 any_na_left = is_na_left.any() any_na_right = is_na_right.any() df_index_1[is_na_left] = None df_index_2[is_na_right] = None if df_input_1 is not None: if ensure_int and any_na_left: df_input_1 = df_input_1.astype( { sk1 + suffixes[0]: _to_nullable_dtype(df1[sk1].dtype), ek1 + suffixes[0]: _to_nullable_dtype(df1[ek1].dtype), } ) if any_na_left: df_input_1[is_na_left] = None if df_input_2 is not None: if ensure_int and any_na_right: df_input_2 = df_input_2.astype( { sk2 + suffixes[1]: _to_nullable_dtype(df2[sk2].dtype), ek2 + suffixes[1]: _to_nullable_dtype(df2[ek2].dtype), } ) if any_na_right: df_input_2[is_na_right] = None if df_overlap is not None: if ensure_int and (any_na_left or any_na_right): df_overlap = df_overlap.convert_dtypes() df_overlap[is_na_left | is_na_right] = None out_df = pd.concat( [df_index_1, df_input_1, df_index_2, df_input_2, df_overlap], axis=1 ) if keep_order: out_df = out_df.sort_values([index_col_1, index_col_2]) if not return_index: out_df.drop([index_col_1, index_col_2], axis=1, inplace=True) out_df.reset_index(drop=True, inplace=True) return out_df def cluster( df, min_dist=0, cols=None, on=None, return_input=True, return_cluster_ids=True, return_cluster_intervals=True, ): """ Cluster overlapping intervals into groups. Can return numeric ids for these groups (with `return_cluster_ids`=True) and/or their genomic coordinates (with `return_cluster_intervals`=True). Also see :func:`merge()`, which discards original intervals and returns a new set. Parameters ---------- df : pandas.DataFrame min_dist : float or None If provided, cluster intervals separated by this distance or less. If ``None``, do not cluster non-overlapping intervals. Since bioframe uses semi-open intervals, interval pairs [0,1) and [1,2) do not overlap, but are separated by a distance of 0. Such adjacent intervals are not clustered when ``min_dist=None``, but are clustered when ``min_dist=0``. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals. The default values are 'chrom', 'start', 'end'. on : None or list List of column names to perform clustering on independently, passed as an argument to df.groupby before clustering. Default is ``None``. An example useage would be to pass ``on=['strand']``. return_input : bool If True, return input return_cluster_ids : bool If True, return ids for clusters return_cluster_invervals : bool If True, return clustered interval the original interval belongs to Returns ------- df_clustered : pd.DataFrame """ if min_dist is not None: if min_dist < 0: raise ValueError("min_dist>=0 currently required") # Allow users to specify the names of columns containing the interval coordinates. ck, sk, ek = _get_default_colnames() if cols is None else cols _verify_columns(df, [ck, sk, ek]) # Switch to integer indices. df_index = df.index df = df.reset_index(drop=True) # Find overlapping intervals for groups specified by ck1 and on=[] (default on=None) group_list = [ck] if on is not None: if not isinstance(on, list): raise ValueError("on=[] must be None or list") if ck in on: raise ValueError("on=[] should not contain chromosome colnames") _verify_columns(df, on) group_list += on df_groups = df.groupby(group_list, observed=True).groups cluster_ids = np.full(df.shape[0], -1) clusters = [] max_cluster_id = -1 for group_keys, df_group_idxs in df_groups.items(): if pd.isna(pd.Series(group_keys)).any(): continue if df_group_idxs.empty: continue df_group = df.loc[df_group_idxs] ( cluster_ids_group, cluster_starts_group, cluster_ends_group, ) = arrops.merge_intervals( df_group[sk].values.astype(np.int64), df_group[ek].values.astype(np.int64), min_dist=min_dist, ) interval_counts = np.bincount(cluster_ids_group) cluster_ids_group += max_cluster_id + 1 n_clusters = cluster_starts_group.shape[0] max_cluster_id += n_clusters cluster_ids[df_group_idxs.values] = cluster_ids_group ## Storing chromosome names causes a 2x slowdown. :( if isinstance(group_keys, str): group_keys = (group_keys,) clusters_group = {} for col in group_list: clusters_group[col] = pd.Series( data=np.full(n_clusters, group_keys[group_list.index(col)]), dtype=df[col].dtype, ) clusters_group[sk] = cluster_starts_group clusters_group[ek] = cluster_ends_group clusters_group["n_intervals"] = interval_counts clusters_group = pd.DataFrame(clusters_group) clusters.append(clusters_group) df_nans = pd.isnull(df[[sk, ek, *group_list]]).any(axis=1) if df_nans.sum() > 0: cluster_ids[df_nans.values] = ( max_cluster_id + 1 + np.arange(np.sum(df_nans.values)) ) clusters.append(df.loc[df_nans]) clusters = pd.concat(clusters).reset_index(drop=True) if df_nans.sum() > 0: clusters = clusters.astype({sk: pd.Int64Dtype(), ek: pd.Int64Dtype()}) assert np.all(cluster_ids >= 0) # reorder cluster columns to have chrom,start,end first clusters_names = list(clusters.keys()) clusters = clusters[ [ck, sk, ek] + [col for col in clusters_names if col not in [ck, sk, ek]] ] out_df = {} if return_cluster_ids: out_df["cluster"] = cluster_ids if return_cluster_intervals: out_df["cluster_start"] = clusters[sk].values[cluster_ids] out_df["cluster_end"] = clusters[ek].values[cluster_ids] out_df = pd.DataFrame(out_df) if return_input: out_df = pd.concat([df, out_df], axis="columns") out_df.set_index(df_index) return out_df def merge(df, min_dist=0, cols=None, on=None): """ Merge overlapping intervals. This returns a new dataframe of genomic intervals, which have the genomic coordinates of the interval cluster groups from the input dataframe. Also :func:`cluster()`, which returns the assignment of intervals to clusters prior to merging. Parameters ---------- df : pandas.DataFrame min_dist : float or None If provided, merge intervals separated by this distance or less. If None, do not merge non-overlapping intervals. Using ``min_dist=0`` and ``min_dist=None`` will bring different results. bioframe uses semi-open intervals, so interval pairs [0,1) and [1,2) do not overlap, but are separated by a distance of 0. Adjacent intervals are not merged when ``min_dist=None``, but are merged when ``min_dist=0``. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals. The default values are 'chrom', 'start', 'end'. on : None or list List of column names to perform clustering on independently, passed as an argument to df.groupby before clustering. Default is None. An example useage would be to pass ``on=['strand']``. Returns ------- df_merged : pandas.DataFrame A pandas dataframe with coordinates of merged clusters. Notes ------- Resets index. """ if min_dist is not None: if min_dist < 0: raise ValueError("min_dist>=0 currently required") # Allow users to specify the names of columns containing the interval coordinates. ck, sk, ek = _get_default_colnames() if cols is None else cols checks.is_bedframe(df, raise_errors=True, cols=[ck, sk, ek]) df = df.copy() df.reset_index(inplace=True, drop=True) # Find overlapping intervals for groups specified by on=[] (default on=None) group_list = [ck] if on is not None: if not isinstance(on, list): raise ValueError("on=[] must be None or list") if ck in on: raise ValueError("on=[] should not contain chromosome colnames") _verify_columns(df, on) group_list += on df_groups = df.groupby(group_list, observed=True).groups clusters = [] for group_keys, df_group_idxs in df_groups.items(): if pd.isna(pd.Series(group_keys)).any(): continue if df_group_idxs.empty: continue df_group = df.loc[df_group_idxs] ( cluster_ids_group, cluster_starts_group, cluster_ends_group, ) = arrops.merge_intervals( df_group[sk].values.astype(np.int64), df_group[ek].values.astype(np.int64), min_dist=min_dist, # df_group[sk].values, df_group[ek].values, min_dist=min_dist ) interval_counts = np.bincount(cluster_ids_group) n_clusters = cluster_starts_group.shape[0] ## Storing chromosome names causes a 2x slowdown. :( if isinstance(group_keys, str): group_keys = (group_keys,) clusters_group = {} for col in group_list: clusters_group[col] = pd.Series( data=np.full(n_clusters, group_keys[group_list.index(col)]), dtype=df[col].dtype, ) clusters_group[sk] = cluster_starts_group clusters_group[ek] = cluster_ends_group clusters_group["n_intervals"] = interval_counts clusters_group = pd.DataFrame(clusters_group) clusters.append(clusters_group) df_nans = pd.isnull(df[[sk, ek, *group_list]]).any(axis=1) df_has_nans = df_nans.sum() if df_has_nans: nan_intervals = pd.DataFrame( [pd.NA] * df_has_nans, columns=["n_intervals"], index=df.loc[df_nans].index, ) clusters.append( pd.concat( [df.loc[df_nans], nan_intervals], axis=1, ) ) clusters = pd.concat(clusters).reset_index(drop=True) if df_has_nans: clusters = clusters.astype( {sk: pd.Int64Dtype(), ek: pd.Int64Dtype(), "n_intervals": pd.Int64Dtype()} ) # reorder cluster columns to have chrom,start,end first clusters_names = list(clusters.keys()) clusters = clusters[ [ck, sk, ek] + [col for col in clusters_names if col not in [ck, sk, ek]] ] return clusters def coverage( df1, df2, suffixes=("", "_"), return_input=True, cols1=None, cols2=None, ): """ Quantify the coverage of intervals from 'df1' by intervals from 'df2'. For every interval in 'df1' find the number of base pairs covered by intervals in 'df2'. Note this only quantifies whether a basepair in 'df1' was covered, as 'df2' is merged before calculating coverage. Parameters ---------- df1, df2 : pandas.DataFrame Two sets of genomic intervals stored as a DataFrame. suffixes : (str, str) The suffixes for the columns of the two overlapped sets. return_input : bool If True, return input as well as computed coverage cols1, cols2 : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- df_coverage : pandas.DataFrame Notes ------ Resets index. """ ck1, sk1, ek1 = _get_default_colnames() if cols1 is None else cols1 ck2, sk2, ek2 = _get_default_colnames() if cols2 is None else cols2 df1.reset_index(inplace=True, drop=True) df2_merged = merge(df2, cols=cols2) df_overlap = overlap( df1, df2_merged, how="left", suffixes=suffixes, keep_order=True, return_index=True, return_overlap=True, cols1=cols1, cols2=cols2, ) df_overlap["overlap"] = df_overlap[f"overlap_{ek1}"] - df_overlap[f"overlap_{sk1}"] out_df = ( pd.DataFrame( df_overlap.groupby("index" + suffixes[0]) .agg({"overlap": "sum"})["overlap"] .astype(df1[sk1].dtype) ) .rename(columns={"overlap": "coverage"}) .reset_index(drop=True) ) if return_input: out_df = pd.concat([df1, out_df], axis="columns") return out_df def _closest_intidxs( df1, df2=None, k=1, ignore_overlaps=False, ignore_upstream=False, ignore_downstream=False, direction_col=None, tie_breaking_col=None, cols1=None, cols2=None, ): """ For every interval in set 1 find k closest genomic intervals in set2 and return their integer indices. Parameters ---------- df1, df2 : pandas.DataFrame Two sets of genomic intervals stored as a DataFrame. If df2 is None or same object as df1, find closest intervals within the same set. k_closest : int The number of closest intervals to report. cols1, cols2 : (str, str, str) The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- closest_ids1, closest_ids2 : numpy.ndarray The indices of the overlapping genomic intervals in the original dataframes. The 1st array contains the indices of intervals from the 1st set, the 2nd array - the indicies from the 2nd set. The second array is filled with -1 for those intervals in the 1st set with no closest 2nd set interval. """ ck1, sk1, ek1 = _get_default_colnames() if cols1 is None else cols1 ck2, sk2, ek2 = _get_default_colnames() if cols2 is None else cols2 self_closest = False if (df2 is None) or (df2 is df1): if len(df1) == 1: raise ValueError( "df1 must have more than one interval to find closest " "non-identical interval" ) df2 = df1 self_closest = True tie_func = None if isinstance(tie_breaking_col, str): tie_func = lambda x: x[tie_breaking_col].values # noqa: E731 elif callable(tie_breaking_col): tie_func = lambda x: tie_breaking_col(x).values # noqa: E731 else: ValueError( "tie_breaking_col must be either a column label or " "f(DataFrame) -> Series" ) # Find overlapping intervals per chromosome. df1_groups = df1.groupby(ck1, observed=True).indices df2_groups = df2.groupby(ck2, observed=True).indices group_names = set.union(set(df1_groups), set(df2_groups)) starts1 = df1[sk1].values ends1 = df1[ek1].values starts2 = df2[sk2].values ends2 = df2[ek2].values strands1 = None if direction_col is not None: strands1 = df1[direction_col].values events1 = [] events2 = [] for name in group_names: df1_inds = df1_groups.get(name, np.array([])) df2_inds = df2_groups.get(name, np.array([])) left_nonempty = len(df1_inds) > 0 right_nonempty = len(df2_inds) > 0 if left_nonempty and right_nonempty: if tie_func is not None: tie_arr = tie_func(df2.iloc[df2_inds]) else: tie_arr = None if strands1 is not None: along = strands1[df1_inds] != "-" else: along = np.ones(len(df1_inds), dtype=np.bool_) # paired intervals pi, pj = arrops.closest_intervals( starts1[df1_inds], ends1[df1_inds], None if self_closest else starts2[df2_inds], None if self_closest else ends2[df2_inds], k=k, tie_arr=tie_arr, ignore_overlaps=ignore_overlaps, ignore_upstream=ignore_upstream, ignore_downstream=ignore_downstream, along=along, ) no_match = np.setdiff1d(np.arange(len(df1_inds)), pi) events1.append(df1_inds[pi]) events2.append(df2_inds[pj]) events1.append(df1_inds[no_match]) events2.append(np.full(len(no_match), -1)) elif left_nonempty: events1.append(df1_inds) events2.append(np.full(len(df1_inds), -1)) events1 = np.concatenate(events1) if events1 else np.array([], dtype=int) events2 = np.concatenate(events2) if events2 else np.array([], dtype=int) return events1, events2 def closest( df1, df2=None, k=1, ignore_overlaps=False, ignore_upstream=False, ignore_downstream=False, direction_col=None, tie_breaking_col=None, return_input=True, return_index=False, return_distance=True, return_overlap=False, suffixes=("", "_"), cols1=None, cols2=None, ): """ For every interval in dataframe `df1` find k closest genomic intervals in dataframe `df2`. Currently, we are not taking the feature strands into account for filtering. However, the strand can be used for definition of upstream/downstream of the feature (direction). Note that, unless specified otherwise, overlapping intervals are considered as closest. When multiple intervals are located at the same distance, the ones with the lowest index in `df2` are returned. Parameters ---------- df1, df2 : pandas.DataFrame Two sets of genomic intervals stored as a DataFrame. If `df2` is None, find closest non-identical intervals within the same set. k : int The number of the closest intervals to report. ignore_overlaps : bool If True, ignore overlapping intervals and return the closest non-overlapping interval. ignore_upstream : bool If True, ignore intervals in `df2` that are upstream of intervals in `df1`, relative to the reference strand or the strand specified by direction_col. ignore_downstream : bool If True, ignore intervals in `df2` that are downstream of intervals in `df1`, relative to the reference strand or the strand specified by direction_col. direction_col : str Name of direction column that will set upstream/downstream orientation for each feature. The column should contain bioframe-compliant strand values ("+", "-", "."). tie_breaking_col : str A column in `df2` to use for breaking ties when multiple intervals are located at the same distance. Intervals with *lower* values will be selected. return_input : bool If True, return input return_index : bool If True, return indices return_distance : bool If True, return distances. Returns zero for overlaps. return_overlap : bool If True, return columns: 'have_overlap', 'overlap_start', and 'overlap_end'. Fills df_closest['overlap_start'] and df['overlap_end'] with None if non-overlapping. Default False. suffixes : (str, str) The suffixes for the columns of the two sets. cols1, cols2 : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- df_closest : pandas.DataFrame If no intervals found, returns none. Notes ----- By default, direction is defined by the reference genome: everything with smaller coordinate is considered upstream, everything with larger coordinate is considered downstream. If ``direction_col`` is provided, upstream/downstream are relative to the direction column in ``df1``, i.e. features marked "+" and "." strand will define upstream and downstream as above, while features marked "-" have upstream and downstream reversed: smaller coordinates are downstream and larger coordinates are upstream. """ if k < 1: raise ValueError("k>=1 required") if df2 is df1: raise ValueError( "pass df2=None to find closest non-identical intervals within the same set." ) # If finding closest within the same set, df2 now has to be set # to df1, so that the rest of the logic works. if df2 is None: df2 = df1 ck1, sk1, ek1 = _get_default_colnames() if cols1 is None else cols1 ck2, sk2, ek2 = _get_default_colnames() if cols2 is None else cols2 checks.is_bedframe(df1, raise_errors=True, cols=[ck1, sk1, ek1]) checks.is_bedframe(df2, raise_errors=True, cols=[ck2, sk2, ek2]) events1, events2 = _closest_intidxs( df1, df2, k=k, ignore_overlaps=ignore_overlaps, ignore_upstream=ignore_upstream, ignore_downstream=ignore_downstream, direction_col=direction_col, tie_breaking_col=tie_breaking_col, cols1=cols1, cols2=cols2, ) na_mask = events2 == -1 # Generate output tables. df_index1 = None df_index2 = None if return_index: colname = return_index if isinstance(return_index, str) else "index" df_index1 = pd.DataFrame({colname + suffixes[0]: df1.index[events1]}) df_index2 = pd.DataFrame({colname + suffixes[1]: df2.index[events2]}) df_index2[na_mask] = pd.NA df_overlap = None if return_overlap: overlap_start = np.maximum( df1[sk1].values[events1], df2[sk2].values[events2] ) overlap_end = np.minimum( df1[ek1].values[events1], df2[ek2].values[events2] ) have_overlap = overlap_start < overlap_end df_overlap = pd.DataFrame( { "have_overlap": have_overlap, "overlap_start": np.where(have_overlap, overlap_start, None), "overlap_end": np.where(have_overlap, overlap_end, None), } ).astype( dtype={ "have_overlap": pd.BooleanDtype(), "overlap_start": pd.Int64Dtype(), "overlap_end": pd.Int64Dtype(), } ) df_overlap[na_mask] = pd.NA df_distance = None if return_distance: distance_left = np.maximum( 0, df1[sk1].values[events1] - df2[ek2].values[events2], ) distance_right = np.maximum( 0, df2[sk2].values[events2] - df1[ek1].values[events1], ) df_distance = pd.DataFrame( { "distance": np.maximum(distance_left, distance_right), }, dtype=pd.Int64Dtype() ) df_distance[na_mask] = pd.NA df_input1 = None df_input2 = None if return_input: df_input1 = df1.iloc[events1].reset_index(drop=True) df_input1.columns = [col + suffixes[0] for col in df_input1.columns] df_input2 = df2.iloc[events2].reset_index(drop=True) df_input2.columns = [col + suffixes[1] for col in df_input2.columns] df_input2 = df_input2.astype( { sk2 + suffixes[1]: pd.Int64Dtype(), ek2 + suffixes[1]: pd.Int64Dtype() } ) df_input2[na_mask] = pd.NA return pd.concat( [df_index1, df_input1, df_index2, df_input2, df_overlap, df_distance], axis=1, ) def subtract( df1, df2, return_index=False, suffixes=("", "_"), cols1=None, cols2=None, ): """ Generate a new set of genomic intervals by subtracting the second set of genomic intervals from the first. Parameters ---------- df1, df2 : pandas.DataFrame Two sets of genomic intervals stored as a DataFrame. return_index : bool Whether to return the indices of the original intervals ('index'+suffixes[0]), and the indices of any sub-intervals split by subtraction ('sub_index'+suffixes[1]). Default False. suffixes : (str,str) Suffixes for returned indices. Only alters output if return_index is True. Default ("","_"). cols1, cols2 : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. Returns ------- df_subtracted : pandas.DataFrame Notes ----- Resets index, drops completely subtracted (null) intervals, and casts to pd.Int64Dtype(). """ ck1, sk1, ek1 = _get_default_colnames() if cols1 is None else cols1 ck2, sk2, ek2 = _get_default_colnames() if cols2 is None else cols2 name_updates = { ck1 + suffixes[0]: ck1, "overlap_" + sk1: sk1, "overlap_" + ek1: ek1, } extra_columns_1 = [i for i in list(df1.columns) if i not in [ck1, sk1, ek1]] for i in extra_columns_1: name_updates[i + suffixes[0]] = i if return_index: name_updates["index" + suffixes[0]] = "index" + suffixes[0] name_updates["index" + suffixes[1]] = "complement_index" + suffixes[1] all_chroms = np.unique( list(pd.unique(df1[ck1].dropna())) + list(pd.unique(df2[ck2].dropna())) ) if len(all_chroms) == 0: raise ValueError("No chromosomes remain after dropping nulls") df_subtracted = overlap( df1, complement( df2, view_df={i: np.iinfo(np.int64).max for i in all_chroms}, cols=cols2 ).astype({sk2: pd.Int64Dtype(), ek2: pd.Int64Dtype()}), how="left", suffixes=suffixes, return_index=return_index, return_overlap=True, keep_order=True, cols1=cols1, cols2=cols2, )[list(name_updates)] df_subtracted.rename(columns=name_updates, inplace=True) df_subtracted = df_subtracted.iloc[~pd.isna(df_subtracted[sk1].values)] df_subtracted.reset_index(drop=True, inplace=True) if return_index: inds = df_subtracted["index" + suffixes[0]].values comp_inds = df_subtracted["complement_index" + suffixes[1]].copy() # .values for i in np.unique(inds): comp_inds[inds == i] -= comp_inds[inds == i].min() df_subtracted["sub_index" + suffixes[1]] = comp_inds.copy() df_subtracted.drop(columns=["complement_index" + suffixes[1]], inplace=True) return df_subtracted def setdiff(df1, df2, cols1=None, cols2=None, on=None): """ Generate a new dataframe of genomic intervals by removing any interval from the first dataframe that overlaps an interval from the second dataframe. Parameters ---------- df1, df2 : pandas.DataFrame Two sets of genomic intervals stored as DataFrames. cols1, cols2 : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each dataframe. The default values are 'chrom', 'start', 'end'. on : None or list Additional column names to perform clustering on independently, passed as an argument to df.groupby when considering overlaps and must be present in both dataframes. Examples for additional columns include 'strand'. Returns ------- df_setdiff : pandas.DataFrame """ ck1, sk1, ek1 = _get_default_colnames() if cols1 is None else cols1 ck2, sk2, ek2 = _get_default_colnames() if cols2 is None else cols2 events1, _ = _overlap_intidxs( df1, df2, how="inner", cols1=cols1, cols2=cols2, on=on ) inds_non_overlapped = np.setdiff1d(np.arange(len(df1)), events1) df_setdiff = df1.iloc[inds_non_overlapped] return df_setdiff def count_overlaps( df1, df2, suffixes=("", "_"), return_input=True, cols1=None, cols2=None, on=None, ): """ Count number of overlapping genomic intervals. Parameters ---------- df1, df2 : pandas.DataFrame Two sets of genomic intervals stored as a DataFrame. suffixes : (str, str) The suffixes for the columns of the two overlapped sets. return_input : bool If True, return columns from input dfs. Default True. cols1, cols2 : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals, provided separately for each set. The default values are 'chrom', 'start', 'end'. on : list List of additional shared columns to consider as separate groups when considering overlaps. A common use would be passing on=['strand']. Default is None. Returns ------- df_counts : pandas.DataFrame Notes ------- Resets index. """ df1.reset_index(inplace=True, drop=True) df_counts = overlap( df1, df2, how="left", return_input=False, keep_order=True, suffixes=suffixes, return_index=True, on=on, cols1=cols1, cols2=cols2, ) out_df = pd.DataFrame( df_counts.groupby(["index" + suffixes[0]])["index" + suffixes[1]] .count() .values, columns=["count"], ) if return_input: out_df = pd.concat([df1, out_df], axis="columns") return out_df def trim( df, view_df=None, df_view_col=None, view_name_col="name", return_view_columns=False, cols=None, cols_view=None, ): """ Trim each interval to fall within regions specified in the viewframe 'view_df'. Intervals that fall outside of view regions are replaced with nulls. If no 'view_df' is provided, intervals are truncated at zero to avoid negative values. Parameters ---------- df : pandas.DataFrame view_df : None or pandas.DataFrame View specifying region start and ends for trimming. Attempts to convert dictionary and pd.Series formats to viewFrames. df_view_col : str or None The column of 'df' used to specify view regions. The associated region in 'view_df' is then used for trimming. If None, :func:'bioframe.ops.assign_view' will be used to assign view regions. If no 'view_df' is provided, uses the 'chrom' column, df[cols[0]]. Default None. view_name_col : str Column of df with region names. Default 'name'. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals. The default values are 'chrom', 'start', 'end'. cols_view : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals in the view. The default values are 'chrom', 'start', 'end'. Returns ------- df_trimmed : pandas.DataFrame """ ck, sk, ek = _get_default_colnames() if cols is None else cols _verify_columns(df, [ck, sk, ek]) df_columns = list(df.columns) df_trimmed = df.copy() inferred_view = False if view_df is None: df_view_col = ck view_df = { i: np.iinfo(np.int64).max for i in set(df[df_view_col].copy().dropna().values) } inferred_view = True ckv, skv, ekv = _get_default_colnames() if cols_view is None else cols_view view_df = construction.make_viewframe( view_df, view_name_col=view_name_col, cols=[ckv, skv, ekv] ).rename(columns=dict(zip([ckv, skv, ekv], [ck, sk, ek]))) if inferred_view: view_name_col = ck elif df_view_col is None: if _verify_columns(df_trimmed, ["view_region"], return_as_bool=True): raise ValueError("column view_region already exists in input df") df_view_col = "view_region" df_trimmed = assign_view( df_trimmed, view_df, drop_unassigned=False, df_view_col=df_view_col, view_name_col=view_name_col, cols=cols, cols_view=cols, ) else: _verify_columns(df_trimmed, [df_view_col]) checks.is_cataloged( df_trimmed, view_df, raise_errors=True, df_view_col=df_view_col, view_name_col=view_name_col, ) df_trimmed = df_trimmed.merge( view_df, how="left", left_on=df_view_col, right_on=view_name_col, suffixes=("", "_view"), ) unassigned_intervals = pd.isnull(df_trimmed[df_view_col].values) if unassigned_intervals.any(): df_trimmed.loc[unassigned_intervals, [ck, sk, ek]] = pd.NA df_trimmed.astype({sk: pd.Int64Dtype(), ek: pd.Int64Dtype()}) lower_vector = df_trimmed[sk + "_view"].values upper_vector = df_trimmed[ek + "_view"].values df_trimmed[sk] = df_trimmed[sk].clip(lower=lower_vector, upper=upper_vector) df_trimmed[ek] = df_trimmed[ek].clip(lower=lower_vector, upper=upper_vector) if return_view_columns: return df_trimmed else: return df_trimmed[df_columns] def complement(df, view_df=None, view_name_col="name", cols=None, cols_view=None): """ Find genomic regions in a viewFrame 'view_df' that are not covered by any interval in the dataFrame 'df'. First assigns intervals in 'df' to region in 'view_df', splitting intervals in 'df' as necessary. Parameters ---------- df : pandas.DataFrame view_df : pandas.Dataframe If none, attempts to infer the view from chroms (i.e. df[cols[0]]). view_name_col : str Name of column in view_df with unique reigon names. Default 'name'. cols : (str, str, str) The names of columns containing the chromosome, start and end of the genomic intervals. The default values are 'chrom', 'start', 'end'. cols_view : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals in the view. The default values are 'chrom', 'start', 'end'. Returns ------- df_complement : pandas.DataFrame Notes ------ Discards null intervals in input, and df_complement has regular int dtype. """ ### TODO add on=, so can do strand-specific complements... # Allow users to specify the names of columns containing the interval coordinates. ck, sk, ek = _get_default_colnames() if cols is None else cols _verify_columns(df, [ck, sk, ek]) if view_df is None: view_df = {i: np.iinfo(np.int64).max for i in set(df[ck].dropna().values)} ckv, skv, ekv = _get_default_colnames() if cols_view is None else cols_view view_df = construction.make_viewframe( view_df, view_name_col=view_name_col, cols=[ckv, skv, ekv] ).rename(columns=dict(zip([ckv, skv, ekv], [ck, sk, ek]))) # associate intervals to regions, required to enable single interval from # df to overlap multiple intervals in view_df. note this differs from the # goal of assign_view. new_intervals = overlap( view_df, df, return_overlap=True, how="inner", suffixes=("", "_df"), cols1=cols, cols2=cols, ) new_intervals = new_intervals[ [ck, "overlap_" + sk, "overlap_" + ek, view_name_col] ].copy() new_intervals.rename( columns={ "overlap_" + sk: sk, "overlap_" + ek: ek, view_name_col: "view_region", }, inplace=True, ) df = new_intervals checks.is_cataloged( df, view_df, raise_errors=True, df_view_col="view_region", view_name_col=view_name_col, ) # Find overlapping intervals per region. df_groups = df.groupby("view_region").groups all_groups = sorted(set(view_df[view_name_col])) complements = [] for group_key in all_groups: region_interval = view_df.loc[view_df[view_name_col] == group_key] region_chrom, region_start, region_end = region_interval[[ck, sk, ek]].values[0] if group_key not in df_groups: complement_group = region_interval.copy().rename( columns={view_name_col: "view_region"} ) complements.append(pd.DataFrame(complement_group)) continue df_group_idxs = df_groups[group_key].values df_group = df.loc[df_group_idxs] ( complement_starts_group, complement_ends_group, ) = arrops.complement_intervals( df_group[sk].values.astype(np.int64), df_group[ek].values.astype(np.int64), bounds=(region_start, region_end), ) # Storing chromosome names causes a 2x slowdown. :( complement_group = { ck: pd.Series( data=np.full(complement_starts_group.shape[0], region_chrom), dtype=df[ck].dtype, ), sk: complement_starts_group, ek: complement_ends_group, "view_region": group_key, } complement_group = pd.DataFrame(complement_group) complements.append(complement_group) complements = pd.concat(complements).reset_index(drop=True) return complements def sort_bedframe( df, view_df=None, reset_index=True, df_view_col=None, view_name_col="name", cols=None, cols_view=None, ): """ Sorts a bedframe 'df'. If 'view_df' is not provided, sorts by ``cols`` (e.g. "chrom", "start", "end"). If 'view_df' is provided and 'df_view_col' is not provided, uses :func:`bioframe.ops.assign_view` with ``df_view_col='view_region'`` to assign intervals to the view regions with the largest overlap and then sorts. If 'view_df' and 'df_view_col' are both provided, checks if the latter are cataloged in 'view_name_col', and then sorts. df : pandas.DataFrame Valid bedframe. view_df : pandas.DataFrame | dict-like Valid input to make a viewframe. When it is dict-like :func:'bioframe.make_viewframe' will be used to convert to viewframe. If view_df is not provided df is sorted by chrom and start. reset_index : bool Default True. df_view_col: None | str Column from 'df' used to associate intervals with view regions. The associated region in 'view_df' is then used for sorting. If None, :func:'bioframe.assign_view' will be used to assign view regions. Default None. view_name_col: str Column from view_df with names of regions. Default `name`. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals. The default values are 'chrom', 'start', 'end'. cols_view : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals in the view. The default values are 'chrom', 'start', 'end'. Returns ------- out_df : sorted bedframe Notes ------- df_view_col is currently returned as an ordered categorical """ ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols if not checks.is_bedframe(df, cols=cols): raise ValueError("not a valid bedframe, cannot sort") out_df = df.copy() if view_df is None: out_df.sort_values([ck1, sk1, ek1], inplace=True) else: ckv, skv, ekv = _get_default_colnames() if cols_view is None else cols_view view_df = construction.make_viewframe( view_df, view_name_col=view_name_col, cols=[ckv, skv, ekv] ).rename(columns=dict(zip([ckv, skv, ekv], [ck1, sk1, ek1]))) if df_view_col is None: if _verify_columns(out_df, ["view_region"], return_as_bool=True): raise ValueError("column view_region already exists in input df") df_view_col = "view_region" out_df = assign_view( out_df, view_df, df_view_col=df_view_col, view_name_col=view_name_col, cols=cols, cols_view=cols, ) else: if not _verify_columns(out_df, [df_view_col], return_as_bool=True): raise ValueError( "column 'df_view_col' not in input df, cannot sort by view" ) if not checks.is_cataloged( out_df[~pd.isna(out_df[df_view_col].to_numpy())], view_df, df_view_col=df_view_col, view_name_col=view_name_col, ): raise ValueError( "intervals in df not cataloged in view_df, cannot sort by view" ) view_cat = pd.CategoricalDtype( categories=view_df[view_name_col].values, ordered=True ) out_df[df_view_col] = out_df[df_view_col].astype({df_view_col: view_cat}) out_df.sort_values([df_view_col, ck1, sk1, ek1], inplace=True) # make sure no columns get appended and dtypes are preserved out_df = out_df[df.columns].astype(df.dtypes) if reset_index: out_df.reset_index(inplace=True, drop=True) return out_df def assign_view( df, view_df, drop_unassigned=False, df_view_col="view_region", view_name_col="name", cols=None, cols_view=None, ): """ Associates genomic intervals in bedframe ``df`` with regions in viewframe ``view_df``, based on their largest overlap. Parameters ---------- df : pandas.DataFrame view_df : pandas.DataFrame ViewFrame specifying region start and ends for assignment. Attempts to convert dictionary and pd.Series formats to viewFrames. drop_unassigned : bool If True, drop intervals in df that do not overlap a region in the view. Default False. df_view_col : str The column of ``df`` used to specify view regions. The associated region in view_df is then used for trimming. If no view_df is provided, uses the chrom column, ``df[cols[0]]``. Default "view_region". view_name_col : str Column of ``view_df`` with region names. Default 'name'. cols : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals. The default values are 'chrom', 'start', 'end'. cols_view : (str, str, str) or None The names of columns containing the chromosome, start and end of the genomic intervals in the view. The default values are 'chrom', 'start', 'end'. Returns ------- out_df : dataframe with an associated view region for each interval in ``out_df[view_name_col]``. Notes ------- Resets index. """ ck1, sk1, ek1 = _get_default_colnames() if cols is None else cols df = df.copy() df.reset_index(inplace=True, drop=True) checks.is_bedframe(df, raise_errors=True, cols=cols) view_df = construction.make_viewframe( view_df, view_name_col=view_name_col, cols=cols_view ) overlap_view = overlap( df, view_df, how="left", suffixes=("", "_view"), return_overlap=True, keep_order=False, return_index=True, cols1=cols, cols2=cols_view, ) overlap_view["overlap_length"] = ( overlap_view["overlap_" + ek1] - overlap_view["overlap_" + sk1] ) out_df = ( overlap_view.sort_values("overlap_length", ascending=False) .drop_duplicates("index", keep="first") .sort_values("index") ) out_df.rename(columns={view_name_col + "_view": df_view_col}, inplace=True) if drop_unassigned: out_df = out_df.iloc[pd.isna(out_df).any(axis=1).values == 0, :] out_df.reset_index(inplace=True, drop=True) return_cols = [*list(df.columns), df_view_col] return out_df[return_cols] open2c-bioframe-4fe9b25/bioframe/sandbox/000077500000000000000000000000001477525772300203515ustar00rootroot00000000000000open2c-bioframe-4fe9b25/bioframe/sandbox/clients.py000066400000000000000000000132161477525772300223670ustar00rootroot00000000000000import base64 import glob import os import os.path as op import posixpath as pp from urllib.parse import urlencode, urljoin import pandas as pd import requests class EncodeClient: BASE_URL = "http://www.encodeproject.org/" # 2020-05-15 compatible with ENCODE Metadata at: METADATA_URL = "https://www.encodeproject.org/metadata/type=Experiment&status=released/metadata.tsv" KNOWN_ASSEMBLIES = ( "GRCh38", "GRCh38-minimal", "ce10", "ce11", "dm3", "dm6", "hg19", "mm10", "mm10-minimal", "mm9", ) def __init__(self, cachedir, assembly, metadata=None): if assembly not in self.KNOWN_ASSEMBLIES: raise ValueError("assembly must be in:", self.KNOWN_ASSEMBLIES) self.cachedir = op.join(cachedir, assembly) if not op.isdir(self.cachedir): os.makedirs(self.cachedir, exist_ok=True) if metadata is None: metadata_path = op.join(cachedir, "metadata.tsv") if not op.exists(metadata_path): print( "getting metadata from ENCODE, please wait while " "(~240Mb) file downloads" ) with requests.get(self.METADATA_URL, stream=True) as r: r.raise_for_status() with open(metadata_path, "wb") as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) self._meta = pd.read_table(metadata_path, low_memory=False) table_assemblies = sorted( self._meta["File assembly"].dropna().unique().tolist() ) if not set(table_assemblies).issubset(set(self.KNOWN_ASSEMBLIES)): raise ValueError( "Table assemblies do not match known assemblies, " "check ENCODE metadata version" ) self._meta = self._meta[self._meta["File assembly"] == assembly].copy() self._meta = self._meta.set_index("File accession") else: self._meta = metadata def _batch_download(self, args): params = urlencode(args) url = pp.join("batch_download", params) url = urljoin(self.BASE_URL, url) r = requests.get(url) r.raise_for_status() return r def _metadata(self, args): params = urlencode(args) url = pp.join("metadata", params, "metadata.tsv") url = urljoin(self.BASE_URL, url) r = requests.get(url) r.raise_for_status() return r @property def meta(self): return self._meta.copy() def info(self, accession, width=850, height=450): from IPython.display import HTML url = urljoin(self.BASE_URL, pp.join("experiments", accession)) return HTML( f'' ) def fetch(self, accession): url = self.meta.loc[accession, "File download URL"] # sig = self.meta.loc[accession, 'md5sum'] filename = op.split(url)[1] path = op.join(self.cachedir, filename) if op.exists(path): pass # print('File "{}" available'.format(filename)) else: print(f'Downloading "{filename}"') r = requests.get(url) r.raise_for_status() with open(path, "wb") as f: f.write(r.content) return path def fetch_all(self, accessions): return list(map(self.fetch, accessions)) class FDNClient: BASE_URL = "https://data.4dnucleome.org/" def __init__(self, cachedir, assembly, metadata=None, key_id=None, key_secret=None): self.cachedir = op.join(cachedir, assembly) if not op.isdir(self.cachedir): raise OSError(f"Directory doesn't exist: '{cachedir}'") if metadata is None: metadata_paths = sorted(glob.glob(op.join(cachedir, "metadata*.tsv"))) metadata_path = metadata_paths[-1] self._meta = pd.read_table(metadata_path, low_memory=False, comment="#") if assembly == "GRCh38": self._meta = self._meta[self._meta["Organism"] == "human"].copy() self._meta = self._meta.set_index("File Accession") else: self._meta = metadata if key_id is not None: credential = (key_id + ":" + key_secret).encode("utf-8") self._token = base64.b64encode(credential) else: self._token = None @property def meta(self): return self._meta.copy() def info(self, accession, width=850, height=450): from IPython.display import HTML url = urljoin(self.BASE_URL, pp.join("experiments", accession)) return HTML( f'' ) def fetch(self, accession): url = self.meta.loc[accession, "File Download URL"] # sig = self.meta.loc[accession, 'md5sum'] filename = op.split(url)[1] path = op.join(self.cachedir, filename) if op.exists(path): pass # print('File "{}" available'.format(filename)) else: print(f'Downloading "{filename}"') if self._token: headers = {"Authorization": b"Basic " + self._token} else: headers = None r = requests.get(url, headers=headers) r.raise_for_status() with open(path, "wb") as f: f.write(r.content) return path def fetch_all(self, accessions): return list(map(self.fetch, accessions)) open2c-bioframe-4fe9b25/bioframe/sandbox/gtf_io.py000066400000000000000000000010461477525772300221730ustar00rootroot00000000000000import pandas as pd def parse_gtf_attributes(attrs, kv_sep="=", item_sep=";", quotechar='"', **kwargs): item_lists = attrs.str.split(item_sep) item_lists = item_lists.apply( lambda items: [item.strip().split(kv_sep) for item in items] ) stripchars = quotechar + " " item_lists = item_lists.apply( lambda items: [ [x.strip(stripchars) for x in item] for item in items if len(item) == 2 ] ) kv_records = item_lists.apply(dict) return pd.DataFrame.from_records(kv_records, **kwargs) open2c-bioframe-4fe9b25/bioframe/sandbox/parquet_io.py000066400000000000000000000076131477525772300231020ustar00rootroot00000000000000import pandas as pd def to_parquet( pieces, outpath, row_group_size=None, compression="snappy", use_dictionary=True, version=2.0, **kwargs, ): """ Save an iterable of dataframe chunks to a single Apache Parquet file. For more info about Parquet, see https://arrow.apache.org/docs/python/parquet.html. Parameters ---------- pieces : DataFrame or iterable of DataFrame Chunks to write outpath : str Path to output file row_group_size : int Number of rows per row group compression : {'snappy', 'gzip', 'brotli', 'none'}, optional Compression algorithm. Can be set on a per-column basis with a dictionary of column names to compression lib. use_dictionary : bool, optional Use dictionary encoding. Can be set on a per-column basis with a list of column names. See also -------- pyarrow.parquet.write_table pyarrow.parquet.ParquetFile fastparquet """ try: import pyarrow as pa import pyarrow.parquet except ImportError: raise ImportError("Saving to parquet requires the `pyarrow` package") from None if isinstance(pieces, pd.DataFrame): pieces = (pieces,) try: for i, piece in enumerate(pieces): table = pa.Table.from_pandas(piece, preserve_index=False) if i == 0: writer = pa.parquet.ParquetWriter( outpath, table.schema, compression=compression, use_dictionary=use_dictionary, version=version, **kwargs, ) writer.write_table(table, row_group_size=row_group_size) finally: writer.close() def read_parquet(filepath, columns=None, iterator=False, **kwargs): """ Load DataFrames from Parquet files, optionally in pieces. Parameters ---------- filepath : str, pathlib.Path, pyarrow.NativeFile, or file-like object Readable source. For passing bytes or buffer-like file containing a Parquet file, use pyarorw.BufferReader columns: list If not None, only these columns will be read from the row groups. A column name may be a prefix of a nested field, e.g. 'a' will select 'a.b', 'a.c', and 'a.d.e' iterator : boolean, default False Return an iterator object that yields row group DataFrames and provides the ParquetFile interface. use_threads : boolean, default True Perform multi-threaded column reads memory_map : boolean, default True If the source is a file path, use a memory map to read file, which can improve performance in some environments Returns ------- DataFrame or ParquetFileIterator """ use_threads = kwargs.pop("use_threads", True) if not iterator: return pd.read_parquet( filepath, columns=columns, use_threads=use_threads, **kwargs ) else: try: from pyarrow.parquet import ParquetFile except ImportError: raise ImportError( "Iterating over Parquet data requires the `pyarrow` package." ) from None class ParquetFileIterator(ParquetFile): def __iter__(self): return self def __next__(self): if not hasattr(self, "_rgid"): self._rgid = 0 if self._rgid < self.num_row_groups: rg = self.read_row_group( self._rgid, columns=columns, use_threads=use_threads, use_pandas_metadata=True, ) self._rgid += 1 else: raise StopIteration return rg.to_pandas() return ParquetFileIterator(filepath, **kwargs) open2c-bioframe-4fe9b25/bioframe/vis.py000066400000000000000000000145451477525772300200770ustar00rootroot00000000000000import itertools from typing import Union import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np import pandas as pd from matplotlib.colors import to_rgb from .core import arrops DEFAULT_FACECOLOR = "skyblue" DEFAULT_EDGECOLOR = "dimgray" __all__ = ["plot_intervals", "to_ucsc_colorstring"] def to_ucsc_colorstring(color: Union[str, tuple]) -> str: """ Convert any matplotlib color identifier into a UCSC itemRgb color string. Parameters ---------- color : str or tuple Any valid matplotlib color representation (e.g. 'red', 'tomato', '#ff0000', '#ff00', "#ff000055", (1, 0, 0), (1, 0, 0, 0.5)) Returns ------- str A UCSC itemRgb colorstring of the form "r,g,b" where r, g, and b are integers between 0 and 255, inclusive. Notes ----- The alpha (opacity) channel is ignored if represented in the input. Null values are converted to "0", which is shorthand for "0,0,0" (black). Note that BED9+ files with uninformative itemRgb values should use "0" as the itemRgb value on every data line. Examples -------- >>> to_ucsc_colorstring("red") '255,0,0' >>> to_ucsc_colorstring("tomato") '255,99,71' >>> df["itemRgb"] = df["color"].apply(to_ucsc_colorstring) >>> df chrom start end color itemRgb chr1 0 10 red 255,0,0 chr1 10 20 blue 0,0,255 chr2 0 10 green 0,128,0 chr2 10 20 None 0 """ if pd.isnull(color) or color == "none": return "0" else: return ",".join(str(int(x * 255)) for x in to_rgb(color)) def _plot_interval( start, end, level, facecolor=None, edgecolor=None, height=0.6, ax=None ): facecolor = DEFAULT_FACECOLOR if facecolor is None else facecolor edgecolor = DEFAULT_EDGECOLOR if edgecolor is None else edgecolor ax = plt.gca() if ax is None else ax ax.add_patch( mpl.patches.Rectangle( (start, level - height / 2), end - start, height, facecolor=facecolor, edgecolor=edgecolor, ) ) def plot_intervals_arr( starts, ends, levels=None, labels=None, colors=None, xlim=None, show_coords=False, figsize=(10, 2), ): """ Plot a collection of intervals. Parameters ---------- starts, ends : np.ndarray A collection of intervals. levels : iterable or None The level of each interval, i.e. the y-coordinate at which the interval must be plotted. If None, it will be determined automatically. labels : str or iterable or None The label of each interval. colors : str or iterable or None. The color of each interval. xlim : (float, float) or None The x-span of the plot. show_coords : bool If True, plot x-ticks. figsize : (float, float) or None. The size of the figure. If None, plot within the current figure. """ starts = np.asarray(starts) ends = np.asarray(ends) if figsize is not None: plt.figure(figsize=figsize) if levels is None: levels = arrops.stack_intervals(starts, ends) else: levels = np.asarray(levels) if isinstance(colors, str) or (colors is None): colors = itertools.cycle([colors]) else: colors = itertools.cycle(colors) if isinstance(labels, str) or (labels is None): labels = itertools.cycle([labels]) else: labels = itertools.cycle(labels) for (start, end, level, color, label) in zip( starts, ends, levels, colors, labels ): _plot_interval(start, end, level, facecolor=color) if label is not None: plt.text( (start + end) / 2, level, label, horizontalalignment="center", verticalalignment="center", ) plt.ylim(-0.5, np.max(levels) + 0.5) if xlim is None: plt.xlim(-0.5, np.max(ends) + 0.5) else: plt.xlim(xlim[0], xlim[1]) plt.gca().set_aspect(1) plt.gca().set_frame_on(False) plt.yticks([]) if show_coords: pass else: plt.xticks([]) def plot_intervals( df, levels=None, labels=None, colors=None, xlim=None, show_coords=False, figsize=(10, 2), ): """ Plot a collection of intervals, one plot per chromosome. Parameters ---------- df : pandas.DataFrame A collection of intervals. levels : iterable or None The level of each interval, i.e. the y-coordinate at which the interval must be plotted. If None, it will be determined automatically. labels : str or iterable or None The label of each interval. colors : str or iterable or None. The color of each interval. xlim : (float, float) or None The x-span of the plot. show_coords : bool If True, plot x-ticks. figsize : (float, float) or None. The size of the figure. If None, plot within the current figure. """ chrom_gb = df.groupby("chrom", observed=True) chrom_gb = df.reset_index(drop=True).groupby("chrom", observed=True) for chrom, chrom_df in chrom_gb: chrom_indices = chrom_gb.groups[chrom].to_numpy() if isinstance(levels, (list, pd.Series, np.ndarray)): chrom_levels = np.asarray(levels)[chrom_indices] elif levels is None: chrom_levels = None else: raise ValueError(f"Unknown type of levels: {type(levels)}") if isinstance(labels, (list, pd.Series, np.ndarray)): chrom_labels = np.asarray(labels)[chrom_indices] elif labels is None: chrom_labels = None else: raise ValueError(f"Unknown type of labels: {type(levels)}") if isinstance(colors, (list, pd.Series, np.ndarray)): chrom_colors = np.asarray(colors)[chrom_indices] elif colors is None or isinstance(colors, str): chrom_colors = colors else: raise ValueError(f"Unknown type of colors: {type(colors)}") plot_intervals_arr( chrom_df.start, chrom_df.end, levels=chrom_levels, labels=chrom_labels, colors=chrom_colors, xlim=xlim, show_coords=show_coords, figsize=figsize, ) plt.title(chrom) open2c-bioframe-4fe9b25/docs/000077500000000000000000000000001477525772300160575ustar00rootroot00000000000000open2c-bioframe-4fe9b25/docs/Makefile000066400000000000000000000011721477525772300175200ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = . BUILDDIR = _build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) open2c-bioframe-4fe9b25/docs/api-construction.rst000066400000000000000000000001441477525772300221110ustar00rootroot00000000000000Construction ============ .. automodule:: bioframe.core.construction :autosummary: :members: open2c-bioframe-4fe9b25/docs/api-extras.rst000066400000000000000000000001411477525772300206620ustar00rootroot00000000000000Additional tools ================ .. automodule:: bioframe.extras :autosummary: :members: open2c-bioframe-4fe9b25/docs/api-fileops.rst000066400000000000000000000002211477525772300210140ustar00rootroot00000000000000.. _API_fileops: File I/O ======== .. automodule:: bioframe.io.fileops :autosummary: :members: .. autofunction:: bioframe.io.bed.to_bed open2c-bioframe-4fe9b25/docs/api-intervalops.rst000066400000000000000000000001621477525772300217250ustar00rootroot00000000000000.. _API_ops: Interval operations =================== .. automodule:: bioframe.ops :autosummary: :members: open2c-bioframe-4fe9b25/docs/api-lowlevel.md000066400000000000000000000033051477525772300210020ustar00rootroot00000000000000--- jupytext: formats: ipynb,md:myst text_representation: extension: .md format_name: myst format_version: 0.13 jupytext_version: 1.11.3 kernelspec: display_name: Python 3 language: python name: python3 --- # Low-level API ```{eval-rst} .. toctree:: :maxdepth: 2 :caption: Contents: lowlevel/arrops lowlevel/specs lowlevel/stringops ``` Low level array-based operations are used to implement the genomic interval operations on dataframes. ```{code-cell} ipython3 import itertools import numpy as np import matplotlib import matplotlib.pyplot as plt import pandas as pd import bioframe as bf import bioframe.vis from bioframe.core import arrops ``` ```{code-cell} ipython3 starts1, ends1 = np.array([ [1,5], [3,8], [8,10], [12,14] ]).T starts2, ends2 = np.array([ [4,8], [10,11], ]).T ``` ```{code-cell} ipython3 bf.vis.plot_intervals_arr( starts = starts1, ends = ends1, xlim = (-0.5,14.5), labels = np.arange(0,starts1.shape[0]), show_coords = True) bf.vis.plot_intervals_arr( starts = starts2, ends = ends2, colors = 'lightpink', xlim = (-0.5,14.5), labels = np.arange(0,starts2.shape[0]), show_coords = True) ``` ```{code-cell} ipython3 arrops.overlap_intervals(starts1, ends1, starts2, ends2) ``` ```{code-cell} ipython3 arrops.overlap_intervals_outer(starts1, ends1, starts2, ends2) ``` ```{code-cell} ipython3 arrops.merge_intervals(starts1, ends1, min_dist=0) ``` ```{code-cell} ipython3 arrops.merge_intervals(starts1, ends1, min_dist=None) ``` ```{code-cell} ipython3 arrops.merge_intervals(starts1, ends1, min_dist=2) ``` ```{code-cell} ipython3 arrops.complement_intervals(starts1, ends1) ``` open2c-bioframe-4fe9b25/docs/api-resources.rst000066400000000000000000000054371477525772300214030ustar00rootroot00000000000000Resources ========= Genome assembly metadata ------------------------ Bioframe provides a collection of genome assembly metadata for commonly used genomes. These are accessible through a convenient dataclass interface via :func:`bioframe.assembly_info`. The assemblies are listed in a manifest YAML file, and each assembly has a mandatory companion file called `seqinfo` that contains the sequence names, lengths, and other information. The records in the manifest file contain the following fields: - ``organism``: the organism name - ``provider``: the genome assembly provider (e.g, ucsc, ncbi) - ``provider_build``: the genome assembly build name (e.g., hg19, GRCh37) - ``release_year``: the year of the assembly release - ``seqinfo``: path to the seqinfo file - ``cytobands``: path to the cytoband file, if available - ``default_roles``: default molecular roles to include from the seqinfo file - ``default_units``: default assembly units to include from the seqinfo file - ``url``: URL to where the corresponding sequence files can be downloaded The `seqinfo` file is a TSV file with the following columns (with header): - ``name``: canonical sequence name - ``length``: sequence length - ``role``: role of the sequence or scaffold (e.g., "assembled", "unlocalized", "unplaced") - ``molecule``: name of the molecule that the sequence belongs to, if placed - ``unit``: assembly unit of the chromosome (e.g., "primary", "non-nuclear", "decoy") - ``aliases``: comma-separated list of aliases for the sequence name We currently do not include sequences with "alt" or "patch" roles in `seqinfo` files, but we do support the inclusion of additional decoy sequences (as used by so-called NGS *analysis sets* for human genome assemblies) by marking them as members of a "decoy" assembly unit. The `cytoband` file is an optional TSV file with the following columns (with header): - ``chrom``: chromosome name - ``start``: start position - ``end``: end position - ``band``: cytogenetic coordinate (name of the band) - ``stain``: Giesma stain result The order of the sequences in the `seqinfo` file is treated as canonical. The ordering of the chromosomes in the `cytobands` file should match the order of the chromosomes in the `seqinfo` file. The manifest and companion files are stored in the ``bioframe/io/data`` directory. New assemblies can be requested by opening an issue on GitHub or by submitting a pull request. .. automodule:: bioframe.io.assembly :autosummary: :members: .. autoclass:: bioframe.io.assembly.GenomeAssembly :members: :undoc-members: Remote resources ---------------- These functions now default to using the local data store, but can be used to obtain chromsizes or centromere positions from UCSC by setting ``provider="ucsc"``. .. automodule:: bioframe.io.resources :autosummary: :members: open2c-bioframe-4fe9b25/docs/api-validation.rst000066400000000000000000000001321477525772300215060ustar00rootroot00000000000000Validation ========== .. automodule:: bioframe.core.checks :autosummary: :members: open2c-bioframe-4fe9b25/docs/api-vis.rst000066400000000000000000000001251477525772300201570ustar00rootroot00000000000000Plotting =============== .. automodule:: bioframe.vis :autosummary: :members: open2c-bioframe-4fe9b25/docs/conf.py000066400000000000000000000053031477525772300173570ustar00rootroot00000000000000# Configuration file for the Sphinx documentation builder. # # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Path setup -------------------------------------------------------------- # import sys from datetime import datetime from importlib.metadata import metadata # autodoc_mock_imports = ["numpy", "pandas", "matplotlib", "requests"] # -- Project information ----------------------------------------------------- # NOTE: If you installed your project in editable mode, this might be stale. # If this is the case, reinstall it to refresh the metadata info = metadata("bioframe") project_name = info["Name"] author = "Open2C" copyright = f"{datetime.now():%Y}, {author}." version = info["Version"] urls = dict(pu.split(", ") for pu in info.get_all("Project-URL")) # The full version, including alpha/beta/rc tags release = info["Version"] # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ # "sphinx.ext.autodoc", # 'sphinx.ext.doctest', # 'sphinx.ext.todo', # 'sphinx.ext.coverage', # 'sphinx.ext.mathjax', # 'sphinx.ext.ifconfig', "autodocsumm", "sphinx.ext.viewcode", "sphinx.ext.autosummary", "sphinx.ext.napoleon", # 'numpydoc' "myst_nb", ] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "**.ipynb_checkpoints"] # nbsphinx_custom_formats = { # '.md': ['jupytext.reads', {'fmt': 'MyST'}], # } # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = "sphinx_rtd_theme" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] master_doc = "index" autosummary_generate = True # Don't include fully qualified name prefixes in autodoc add_module_names = False # Cache MyST (.md or .ipynb) notebook outputs if unmodified jupyter_execute_notebooks = "cache" execution_excludepatterns = ["guide-performance.ipynb"] open2c-bioframe-4fe9b25/docs/figs/000077500000000000000000000000001477525772300170075ustar00rootroot00000000000000open2c-bioframe-4fe9b25/docs/figs/._bioframe-logo.png000066400000000000000000000100001477525772300224430ustar00rootroot00000000000000Mac OS X  2°âATTRDâà@àcom.dropbox.attrsúcom.apple.lastuseddate#PS com.apple.quarantine  µ‚§m#qTvbîàÚ•&fÅ^I=Â0082;5ec56627;Preview;This resource fork intentionally left blank ÿÿopen2c-bioframe-4fe9b25/docs/figs/bioframe-logo.png000066400000000000000000002062271477525772300222500ustar00rootroot00000000000000‰PNG  IHDRÒw„¢ pHYs.#.#x¥?v IDATxÚìÝy|Sç™/ðG:ÚWËH–±16Ø8€c704,iX4H?Li&i¦3½™6“™æÞ6i¦·™&vÚ¦CÚÜɽmÓN&!!²‘„²„°Â’ØÆ/€°‘ÙØZ,ëÈ’uÿxAq¼Ë‹tŽôû~æó™FÙÇï{ôê=Ïyßç‘„ÃaH%R4¤û¡PmÉM"‘H¥RŠQHAŒ@ÊA`RŽlèK' ¢iÆÃd2¡=ÑžhÏ”Ce2½^ùÏ®®.´ Úí‰ö´'ÚSìÔjJ¥dÿ; z<´ Úí‰ö´'ÚSìôz½L68:L`4 òÚk¢ =ÑžhÏÔÆD{¢=Ñž€öD{&…BAtýF4ÜF{¢=ÑžhO@{¢=“€®?<ôEl¥€”ƒÀ(¤F å 0 )QH9Œ@ÊA`R£r€”ƒÀ(¤F å 0 )QH9Œ@ÊA`R£r€”ƒÀ(¤F å 0 )QH9Œ@ÊA`R£r€”ƒÀ(¤F å 0 )QH9Œ@ÊA`R£r€”ƒÀ(¤F å 0 )QH9Œ@ÊA`R£r€”ƒÀ(¤F å 0 )QH9Œ@ÊA`R£r€”ƒÀ(¤F å 0 )QH9Œ@ÊA`R£r€”ƒÀ(À0d§T(РVªd‡vH>Œ C.“ ´è Q€d„À(À0J…B¡PÈdhŠT¦T(är™J¥BS$F†¡P(ˆH§×£)R[5Œ£I Q€aÈå2"R«ÕÈ/™²2‹Ëdr´@òA`’'‘¦›Lhˆ•Œã$’ë·ÌZ­ ’š"ë…Y”’ £ÌtzZ­æ$¸÷ØÈer"òy"Òj5¸„RŒãÔjuä2@¶Y€äƒ‘’'‘jµ"Òéuh ˆ‰B© ¢jgm³Ç&‘H•*%Ú$Õèt:"ªrÖ\ñ´Ç!0 l€¤¥V«Ùnh¬øƒX±Ì’¾«5Ž‹t£¤N"ÕhÔDTí¨ïìqIÐ*É3HZl¡¨?ÈcÅÄŠU!ïì¹Vëhêæ]Ç) 4KJ‰´Ùcku;¾«DÔßòõxÑ2ÉQHNµšã¸nÞuøÊqŠ?ˆ'‘²À¨Óç&¢rû9"â8ÜA§–]ôdK9uúº‰H*•\<_ƒ–H&Ö 9±HèÉÖÒÈŠ?µR…fÑÉeDÔì±±ÿ¬q\òy“)½/À£qRAä±J«ÛIDÞGDééæÖ¶6"ºQ€¤À($!µRÅⵎ&":ÙZJDj-£¡R©ˆÈÁ2KB}ÕÎZ"òõxÏU–¡}’^ä±Jä%ç¤ÒÇ^<_ƒØ(@r¦¤š^¯×õ‡Ñ4í‰öD{&1‰ô ا˜ÒÑ&hO´'ÚОhO`%ÅÙh"j¸ÖêŸÎ«Õj Çõ‡ú£¼‘m ¾~¿$—¡=ÇI¤í©¼y¥Ü~~~fÉÜ¢â7ÞxcJú”y_º홬×'ÇI>Vaܼ›ô¤V+Ï;§V©tZÍW} ˆëí)"l+Àà‡yI&CcMd»£=ÑžhÏ”!WÈÑhO´'ÚОhO!H$R©Ôäk—Ø+P_™½rÉ´…~¯V«ýÏA{Nl¿ˆ¥=¥œ”ˆ:{®E^ñð¾*gM±¹hö-‡¾eN‘N§G{&åõ)å8"ªv\ø¯=×ÈL¦éJ‹Z¥šžc[ª{½ž„_ø¼£=a\£=š’íR*%¢2{e Ôy±ÆÙHDƒ‘ˆ¼^Z nŠU^ЍvÔцM›«Ï_|ï7OŸ<†&JÂÑC"‘ùƒüû£¾«D”73Ÿˆzýþ+-­÷ï9[YŽÁ@Ô€d3l\ƒ­ø#¢ÎNûKþ#Z F¼~$Py)¢ÕílöØt:ý‚’yg*Ͻ¿goeE)š+){Ðc"rô¸ˆhÖ¬Ùì?Ûí'N>~ü“³•åh4ñf­ßχBA4ÍxhµZ´'Úí™ 8N¦R)#ÿÙÓÓƒ6A{¢=Ñž€öD{&œZ­æ8®¾»aP\ƒˆN¶œ-6 Æêóu5Ugóf }»B¡Ë¯oW …úýþ^\cã!ÆöTªTJ…"Ryi ÇÅ\}Ζûøá? ‡ÃûöÈÊÎÑjõhÏä¸>^§ÓÑæB}þ ¯ÓéÓŒ†n—›ýŸZ¥ššY[É‚žOWQQQùàCßF»Á@,1°$ý@ÕŽ K¦-\³jåïÿôÕœ¿Ðpé²R¡¼en1šNÔ$R©Ô4Âc"²¹Úrõ9³ .7]‰¼Øép**J•Ì_ˆfFƈ“Hå2¹T*eÓ( QvVÖMßåò½£ùùF…!Mi¼1K“²• l݈™†B¡P(ä÷ûC¡P0Bï@Ê~;³Å³åí5#Óêvvó.kfÖ‚’y»Þ|‡ð¶æË9¹3Ðzðù…ÄqìRö_ÏØ/ÌϼmñËߨõÛO‡?9y2'w Š»ße2"jöØFz¬âxˆÈb± |Ñãñz<^•R™5µ­„hè"t2Fb¸×R( ¥B¡PÈå2‰d˜úu>‡?äwô8ýÁ °…|00¨¤i¬œÜ¢5‘Q©3(ô*™Â¢5«8•Uc3eÑR* >Bá~ô¤^'‘H›=¶èß¼'[K×Í\ùµõ÷–Vüœˆ^Ýþú°{ê!5) 6©é€@¨¯¾»¡Ø\tï=k·m߇‰¨®¾ñÐÁñÜSN&“ÑÉ–‹)±ì 3óg ý'?Ï·µ·Ÿ8~{êDöÁGD%9N¡P¨T*…B1h;<[ûéèqºxo§ïª›÷ôlyü¡>¶f¡•¯\`1Ó Í£RgÑš­ê •L©P( 鈈B¡P ðûý@‹I ‰q©V«¡¨q ¦ÖÑ´|:_0köŒ¼é—›®¸\.쩇¹Œí£¶Å‡UñZ´ä®oíæyž½ˆ=õ¢ÆŠÑwø#­¦‹ˆ n¦{êDyË/ö?@£V¬$“}}}ì!aÛZË^d_«)XDWÑ(/žn— ] ÀÛ*…B¡Ö¨‡C›=6›«Íá»Úéëž¼0hLXÌtàN¯ÔdhÒ,š)9Ƭ\}ÇqjµZ­VÛnÏûù^ÞŽNúáH"‘J\À³-,´YÓ˜¡XjŽ¡¯³ÔÆL°/ˆÕè @J•’-׈(³WL‰=õÁ[=×¢ãá}u]…¦üå_]¼ïÃÃìEì©5v_n?ý°ŸÃª±LÍ´¶Û;_©½§žÍj8Ž‹Ì?J æŸã½3ÐöDüaX¢ŒÊåòAy÷ðÅ9 °'NÆ4ãà(F @¨ ‚«8 rœJ©bñÐÏAþЧſn³¹Ûǹ>n<¼ÏÃû»ÚN·V‘YcÈ1LÍ1dM×OSÉ”Z­–bü~oo/ïçÝH‘á¾€Æ)’Úø‹3ì`8Ü™Þø@¸aSHVv©Æqq4JÉxº±§¾§Ç#À‡¿9¡,Z奈r{U¡)åª5‘À(öÔ‹»yïæ]µŽ¦èGºx·UcIO3 Œ^¿}HÕ=õCg5©óω¼JÑž“4æ'ÇŸQ嬩vÔ'ê·çè§ûºQ¥3( ì³T€ÃÞš¼Í¨ ’"WQ†fÊŠÜ¥hvAŒƒ§Rª4Z­\þùØì±5\kQ04 §Ïíô¹+ì‰È¬1˜rg¥Ï´j,*•J¥R"¤øRKy …Öãš)Jn˜iwŽñóúr¹úœwA²/LoÜý±˜i èëë …Bx “M£Vs7š¸Æõ‰÷ÓD^y¸\Õç*Î;÷¿~ðš4e±‘í¦ëŽ[ÝΟƒUñ*­87🰧^t$R)l-½é‘=ÎBSþôéÓj.ÔxL ï©Ç<Ó]ñ’ãÏpù½£Ù/3IbýÕÙ3©8…E3%r›Án0PA%e¯"ˆ?N"Uª”:>rWïòõÝ 6w{õÖ@¨/)ÿj§ÏíôUn­Ò+59†ŒÓŒBSþÀ©¯Ç‡]öŽ Å{|¤“a‹Ð1k J™‚n<'ÎК•2KvÌF×σûú‚¡P0 Ü•0QØrÑÑÄ5"XšÈÕkÖLÉöÔ_j¬¶¾ $½›V^¨Ü~öF¯/F±§^\$‰„È䮵Þô`‡ï*ͽµ8²Rx¨TÞSy,ˆŠ/%ò~£±«màm« ÂJN糆VPéë |oo/Ö\Œs¾«ÕjYÎMºm¸ÖÌ>’)ÂÃûjMµŽ&÷IAzöÀi8Üïóõz½^,Z€›Š,«z”m0³ÇÀZ³Qi°j,r¹ŒEK¯?&¢ðuhIÿ—{LËE#߆CÓD²=õÿùŸ/üöwÏ{½¥B…æM)£©¼1¨ŠWäuì©¶\´Ì^9šµ¾n"Êšš}Ó#Q§@ëTÈI7¢¥ƒ*¨°Û ­V÷ûý|¯¯ »Ä®éRýÞ}û6ã~4Ep©Z­Öéu‘zJu] ]—“x}è(GžH„´È2óVËl«ÆÂò¯Ç‹q0 ÃØ°PéÀgNf!C›ž¡™bÑšsõ9b«t$D”aÉx”†ƒ1cËE«b}#K¹aÓæA‹¿®uw—}zâä©Sß{äûhÞ”2šÊK±*^Kß100=õÂ'•J%DDtÆ>ª„Õ_µffæ`Ô©Lw…QATA%Û`žeÊÍ1L³j,¬Æ4‹öôô` ©Hõôú:::Ñ“>ÒqœÁ`P©”‰”ˆºyWµãB³Q eå"ê«°_¬°_4k ·O-š•V R(Ó§¤‡B!¯ÇÛÛÛ‹l€Ɖ¥<®¥&öŸÙsŽ~êЧ¿<@âcˆ Ûcåò£Œk Ôêv6{l¹úœ¡i"ÿôÒ+~ž¿t©ÎhBUåTš7Ž®òRÄû…%Ó®^³þý=ûº]ƒsÓcO½¥’ˆªœ5£_*ÁAË„‡¿£Oí:õ€é®(HÑ"Òêvm.µê½?V¾~¨ùx‡Ï!‘HÕjµÙlδZu-'A‡ŠO§ÃùæÎ×Ñ“w§4%=ÝjµªÕj‰DÚì±½[·÷Ï•ožn­BT4Jäâ@ã©+wj>ÞÍ»8Ž3¦­™Fƒƒ `@†‰Øœn­z³öÀ|úç7Îï.³W°¹J¥2™L™S3§¤§«•ØÅ 7Ç’3ŒrìP¬Šý–ûôºŸç‰èx‘ˆ|=^´sŠ`?=®QõU9kˆhŲ;‡þëÀ=õk«Ð¼B#ã8¹\ND'[ÎŽþ]nÞMDfSÚ(ì©¿x¾m˜î n@ˆ‘‡÷±…]z¥¦Èœ«evšÒhL3Œzd>¨ª®íèøÕš5íH©P †HÑ*gÍÉ–³†Ž^di¾)ëËS‹sõ9:N«Õôôø¼/–qd˜X­ng«ÛIT®Wj L9,­G$ñ±ßÏ{=ž@0ˆ†‚aã¬„à–‹2µŽ¦EÙ.kfÖ°ë¿®uwWŸ«¨¨¨|ð¡o£µSaIDݼ+¦ ;«âµêî¯íÙw0RÅkšóº]nl¨­VËîbºMpù½D4=wú eæQ°=õyy¹%htÀtWh 4¨yxßéÖªÓ­U‘ÈË ØÛÛëêv!r!¢±ÉÖÚ†v˜Àm$$êòeöÊ3ö ©œEtœ»Ú»Ú² æEÓnGx0 Cæ6‘§¿‘)Ë zzz|½½h%ˆeiìPåös+r—Þwߦ­Ï=?ô_Yz[óåœÜhðäÆ2Ñwúb«©íá}loõÂù%ÇNœö˜n—»«Ûått˜-V´³Pº["Õj5DTí¨é6O;åÍÌá"ñx=/K6 €é® `SdòD.Þ¬=ðrÕ.¶C­Vcß«è`Mûø) ‹Ùl6›Y¢±OZ>}±rÇéÖ*DEǯÕí|³öÀ+_¯rÖH$RN‡A0 äbÒW«Þ{¹jW™½Âä …ÉdÊ´Z5j5`d§V«)Æm°CÕ8.ùƒ|IÉ‚©™Öáî!y"zu;†…äÇž¬wö8c}ãÉ–r"Ú°ñ¾‘`{ê>„FŽH®-V-pôX¦…Y³fa‚fLw…sʤÂ2þ±òõº®F¹°dXœK,ØšöþÏï0<í¾(ÝdBH4qЧÞ8¿»Ùc‹ 2µ-aR§7G›Ë_¬Ü±÷ÒG,ñ±Éd³`XvÑX·Áõ•Ù+‰hÕŠ»F:ÆårÙš/£Í“K7ÉÖƤÕíìæ]Ö̬%ó¢v®ºùj4€èuDt¦½j #†?ÈëtzV¸)†¹´½˜î f“IÈÃûÞ¯;Â"Ç¥OI·˜Í2ŽCˈbl²µ¶¡N\L8‰Ôh0°òJD„h°Õ£‘AÆd2eX2” ì  È0‰¡¾ZGÓŸ+ß|·n/žÍ@d Ñ¨)öm°Ãªq6Ñê5ëÓŒ†‘ŽÙ¹kš=¹±££¯¼4ÐÉÖR"ºsÙ²hCY pêÄq´³hÔjŽãºyWc×XöwôvQÖÔ˜# `º+4Œ&-¹Ø{é#¶õ,wâ5í£§Vª,–Èj‘?V¾Žhü™nÞ%—ËÌfsºÉ„Õ[€&K„g3@D:½nlÛ`‡åá},'Õ çtŒÓy Ëý’˜B&£Ø+/EÔ:šXB†yÓ£vê³R4µ°ôÄ,œ=Ž'Í.,ˆõΫWÑø€é® à6ÉÕ:š^¬ÜÁvÖ›L¦)éé[Ö´†Œã,fsú”tŽãš=¶7Îï>Ðx Eç2Èl«ÚýI˧þ ϲë4Z4 `@†É†g3@D¬j Ëí8!ÊÛkˆhæÍ#m Søõí¯¡å“vz)—Sì•—b –.¾#Ê1÷Äñ£híÄR*Çùƒ|­£il?¡Ów•ˆ,K¬olkCÑÀtWX0}L~PßûuGØÒQ•J5ÅlfÏBAàcÖ´GÁöγt¢{/}ôfí Y*cdN·V½Rý6ÛÜjL3"}`@†ø`›ë>›AjõÔ¡Q«%i‡Ï1s§ÏÝì±étú…óKF:¦ñÒŒ&­1W^ŠMB"ª¨¨Dk'[.ÊÙcãâ½Dd±fÆúFÌ(Ó]¡A`4…î^©~»ÃçËef‹· ¢€5íÃLXe² KFdïü‹•;Æü˜&–‡÷½Y{àݺ½,}‡Õj5 hH¦ùíÛÐÂ4ðÙLú”t,M,®Qn?;±?–•a‰R[¼?~÷mdMNc®¼4p:tÓ„ DdkmC¢ÉÄÞP°gìÆüCØ#™’’±¾±…éñÁ¬1…xxßÎÚ½UÎvÛ€”£Â‡5íƒ KF†\.ëæ]lï<Ò‰ McWÛ‹•;ÊìD¤Óé°t’i@®¿ãü{“Tj¡ØY»—U«7›ÍHâ!>#O$6ŠZLâY.ÊÖrÆA¹½ŠˆV®Z3Òa ïyÿ=tM2ÌB• š ÊKÞÇ2ܱp~”Ãl­mX<j¥Šã¸nÞ5±·.¿—ˆ¦çƼb´µ »éÓ]¡@ ®;ÒTÆ–q¥Åþ¼ â’ì¡F­¶dd°lèÛªvOHBt&V­þ“–O‰Èd2!H!"±QV‹ "F,»h]WcÜrì´º>‡53kAɼ‘Ž©t1‰ˆNGDeöÊ _~õùƒ¼N§R¥mø[oBáB»Pø‚Æ®¶H²Q´L6N"’ž)µ„¤¢)ˆ-àêæ]¬(ŠD"A›À¤ªu4j>ND¦ô4<‘ÙEP•±Úqˆî»oÓHøz{KO}‚>¯É¨¼4p̹ilˆ>-EÅÑÉ"ã8•JE7ÊaM8vådMµÆúÆ‹µHÄ ŒÂ`GšÊXÂh0 5`òpé³Y¥Rùƒ‡D"•rRÄF`²EjNÓŒh ácq“­¥‰ú’ªvÖѽ÷¬é˜k]](,.^¬ò’;à™¤Ÿ_ã¸tÓØ:ùøúb2n:n¬7?;I¿¢Ów•ˆ,K¬oìêêB£0ŒV·³ÊY£ÓéÛÛmh ˜Œ ‹Švø/Vî@TèFl´®«‘ˆ€8Œ9û°BLH6*p‘å¢ Ü\Rn?OD«×¬ØzëwÐYbšruö\›¼禱u"òx¼Ø[=áX1úº®ÆIZ.JD.ÞKDkf¬oljjF2+ÁðŽ4•ÍJ+¸í¶ù¿ú÷{ðoÿ 6õÝY»7¹ Ð땃R“¡™¢ä*™Â¢5³×sõ97}o7ïrÜDÄ=N"rø®úCG+Y-ê{¿îÈÝùþbs‘”“ö‡úñy€Éãô¹O´~¶"w©Áh8¡0ÆÒjµ”¸å¢Œ‡÷U9kŠÍEw,œ¿ïÃÃÃÓaïôõx5ZºLtSSÔGõåöóó3KV¯Y¿ó­Ý<ÏtØÁÝ2·2«Õjˆ¨Ü>‰g–⣤dA¬oì@aza@`†õ±»…oÿÝßÿð‰ýêW¿F›À„ÌN’8*ªWj24iÍ” ­Ù¨4X5–ñü´4¥1My}ƒg¡)à?ùƒ|Go§£Çéâ½¾« I¸6y4ž""UÈd`˜$ö‹éy¹úµFííéAƒR¡P(þ ßp­5±gRí¨/6mØ´ùðÇ'† l…)üúö×¾óðwÑk"»–ˈ¨Ù3¹ûä<¼¯®«±Ð”¿ü«‹GŠ­‘­µÍéè0[¬è—‰@TJ‰DÚì±Möl¹›w¥)iFC·+†ðz ÀÓA|  ÊÝÂí™ó¬™YK-|òIÄFa¼’2*jÖr Ss Ys$ŽÑaokkoutØGOÏÖz=©ÿå¦+7ýÉiFƒÉ”FD•júôiD4÷Öb"*)Y ’)sõ9—vø6w‹ÍÝns;’ a#±Q³Åìt8€É³¿ñøC·~Ýh4v]»*ÇžzáaÙEËì• ÿvku;›=¶\}μ¹·”Vœö˜ÆËMè2ÑaõÊYýœIUn¯*4åoØ´9J`”ˆöíÝûàCßF¿LàRã¸8Ù¿Èp§)ÙS3c Œ‘­ù2Ö$£c¡àäml©úù`@Œ‰÷]:òÍ9ïà¡OË*…ñH¦¨¨‚“¤g˜fL×OSÉ”‘×½^O}ý…Úêª+WZ®u»Úíãù-Ý.wdjUs¡Žˆ"Óh¥R™5Õš“•——;3VÁ¬ÙVŪ±ÌÏ,¡AÒú®fQ¯$ElâÃÃûصZÝb»’™ƒ6ЮLÆ–‹ž±_Âùœi¯ÊÕçl¹ÿÒŠ'†= ¿¿ÿÝ·wmúú_£ïÄt?,“Ñú9“ªÕíìð9¬:Ë‚’y#ÅÖ‰¨ºö ‰óqïH®o¨ÏÌùèà>¹B9Å’aA tz=U;k2shìjëæ]Ö̬¢Ù…#…?ÎTžC`T\är9Mfå¥Êíg×Í\ùµõ÷F ŒÑáCï¹wºf¼ˆNOñJOìð]%¢¼Ü¼XߨÖnGOa‹énÂ!0:vluØh?®:}Á¬ÙDÄöÀÒ«¯4{l6W[CW³o3N¶”çÎɉ$TBlb%ö¨([Zd¹eàgöıÃ5µµçªkã ŽÅIÙ’ÒyÓ¿|Û¼E‹ï´ff›‹ŠÍE,BZÞ^#º@ÆÆS¥!WŸc¶˜;ì(2I JÍ’i Ñèñ1`{Y8>èô]i¸ÈlçÉ'ôðÿx±QAÜ¥pœZ­¦á…r©´–®›¹rͺµ#F@é©Oܱ=(–ij*/EÔ:še» fÍž‘7=Jb¥ÊsUŒŽ“R¡ËeqKOÌ Ó[§fÅüF— …y,$~Ê&³úú [Ÿ{>æ1Z©ÌšjeIóró g[3³XºÀ%Ó 0~1hÑh8FlbšnŠ7*jÖnŸZ4+­ ²_þÃý”—W4\nŽRN4áXôíÝ{ÒŒ†y·Î]¾beÁ¬Ù,BÚás”ÛÏ6\kQG¼wñð7殳j,SÌæ«N'b£“§ÃÞöÑÁý©ÜÎ+k³4ÇÌÐǽkıh©ÍÕfó´‹%NÚêv²šã÷Þ³ö7[·>ú½ïNËa!Á÷ºU9k<¼O8gÕp­Õ?/)Y%°µÿà!FEs3—ÊKU;.,™¶pͪ•¿ÿÓK#ãñxO?ºxé]è q qKOÌnÞÙ7cL"óXLwù]€&ˆ3¶–n$ $"¥RY0#wöìÂ+¼Xü"ùPFƒ-£X¹j [†Ø(Œž1ÍÈžÖî®;(¢`Ü\KÞÀ%¢¥ÇŽ9W{QÈñСº]îc'N;qzj¦uÑW¬ºûkVeÝÌ•þé|µ³¶Ü~^P·š# „úvÖîEl4ÚÚ[£—ƒ€ïñafeâØã^‹Åb±f-×ásÔ_»$Ìm1_œíœ-6­^³þý=û^ø¿ü‡?ĺÑâ$R¶\ôdËY¡}+•Ù+—L[¸tñ#F½==¶æË9ˆ­‹AÜ*/Eœ±_˜ŸyÛâ;—¿±ë­(NþѱÇ88.þé‰;|«Æ}-𰜎³ÅŠ^Ã<9h  Žçùš u5êÞÞ½gPübQ¶ëdkiÂã­n'K¨É‡ÿåÉý±Qˆ*ÝdR«Õþ ¿ãü{¢ˆÁÑ\Kޢ쬾¼×ë9xà/‡ŽÈ~ù1k·w¼½{ÏÛ»÷,(™wç²e%% æg–ÌÏ,©rÖœl9+ü®a±ÑooLSiÆk]]øpD¤LÜÀmÅiFCöÔÌÙ³ ófæG/™¶°›w5t]ªvÔ 3Bêá}‘E£Û¶ï|ö?þã ÄFG§×Q³Ç&À/©gã’i Y }¤ÂÎ]»~øøÐ"¸ŽW女šúî†ÈP3ÒaçÕ‹µU(Ë36l¹h}wC<—etú:­‹Ù”k`ÔÖÜ„À(@bIÑŒ_|÷{ß{þ¹g;ìmiJ㺙+,Þm0'öÄXÖ꯭¿7òJ8ü/ObÂ#ßÒh´‘¨¨(R[εä}ç¶Íëf®LS;ìmÏ?÷ì÷{ìíÝ{Ĩ´âÜÖçžôÑG>Üÿ›‹þá¶ûïοC¯ÔüÌ¡¾ÝuüA^­V§›Lø|Y·ËÍ÷n}îù|à—¿øÙ»oï`³šù™%[ü×o˜kÉSpr¡9[œ¸zÍú4£ˆ~³ukKóethüq©V«!¢“-å<=C'¢Ëîé‡óª¯Ç‹®>Vy‰%ˆŒóP³hÉ]J¥2Êa?ŽƒHzâ8¯7wù½Dd¶Ä|ÛÞÚ†Ýô †À¨pã?xü µj,ßœ³ñ®ÜÛx>µŽ&/˜5{jæç³úÃáÿË“è,J£VÓŒDtøÊqáGE‡†Dðø¥çĵq>¦˜Å¶í;EuúÜ;οGDjµZ£VãS ,HúƒÇŸxüñ¼ûö¯×cÕXÖÍ\ùðm[¾’],¨ðè €W8~á÷¸êèD'Æ™Z­–H¤Í[«[ ©ÐXÀeÕÝ_‹Øz}ûkèJ‹T^Šó•æá}u]:~ùWG9¬ñR“ÓÑnŠ•N§£D¤'¶yÚé‹ù¸G©­½½XŒ  nõ%"šŸYò`ñ†F.ªµD´jÅ]_ õ÷?õÔOÐS0B&KK3Ñ¡æãÉ“;’lƒyóÜ»‡†DS¡›††GºõëB R âô¹÷^úˆˆL&“R¡Àg @\n‹©¨(UÉ”K¦-ZxtPÀ+ÿfëVÄFãŒí£?Ó^%Ø3ôð¾f-z`«¡Ë…ŽU^êð9âÿ«ËíUD´rÕšè‡íÛ»ÝN"ÕhÔDTí¨ó¯vó>"š{ý%·ÛƒŽH,FE`߇‡üléèC·~ݬ1$ä4Êíçi¸M@àç?ÿº "Ó³Å,‘H«œ5ö‹‚=O'¿;ÿŽoÎÙ˜«Ïñz=)(=qì0 R|«xc¾)K°'\ëh*³WÑ”)é2ŽÃ'@ŒXZ§žúq$<*œ‘'ðš7÷öJ8þÄFãH£Vs×Í»»½½”móØ Sx×ÛÑ¡B&—ɉ¨Ó—€O÷ÀQ«khDN†˜èôºD­7÷ð>×éôÑ3$ åp^EÇ$£âÐnïøñOžb÷[ælHHltè­Âçÿäñnýͳè& ¢)f³D"íð94žìI曲¾mK±¹ˆˆ¶¿úÒ÷{,C¢u»Ü¿ÿÓKO=õã†ú iJã¦Âu÷.ìÒÑ£Íåu]‰4=} 'Á·€X]nºÂ£ByjiH^õßþîwOÄ«šÂ²Û Ùh[•çªÐ¡B¦P*ˆ¨³çZB~;»Èï\¶,Ê1@àð¡ƒè©Ñ»‘]41é‰;z;‰(kjÌ•”.Öb¬H$ÜRŠÏó[Ÿ{þÃý$06ÊnæÏŸ?ôŸ:Î7wà©xªK7™ärY7ïÚY+Ð?z¥fóÜ»7®SÉ”¥>úȾ'k.Ñ1)žþÙÏ_üà ^¯§Ð”ÿðm[»ttã'>‡\.c©l iFžooLÔΘˆaóª÷ƒ¿úÕ¯lj¥Š-x*fhmÒABýýÀVhá’]_1š˜õzl¨))Y0#oz”Ã^½ÈzóD¥'vô8‰(';æù³ó*$£"³mûÎHl4þùF®µÑâ;—³j­ƒ”Uœ=zèCôQ*ÏEØCÚÝu¡>ža¾)ë¡[¿Ù;¿õ¹ç“©âüD9vâô“Oþˆ­OìÒÑ@¨o_ãV¤^§Ñ¢×’cäaKG·ÌÙ0×’—ØóayÕ}eÁÀù¿uëVÄF'Ë.ZnÇ6ŽZGS7ï*˜5;J`ëÄ©OÑ­‚%—Ë(î•—¾p÷d¯$¢¥‹ïˆrŒÇã=qü(:k4¾ÞÜÅ{‰(//7Ö7vuu¡ûQñÙ¶}'‹Yl,\ÿ`D]W#Íš9üËþƒ‡lÍÈ4ŸŠ"—ö^úH€eèYFQ¶PôÄ±ÃØ;]·Ë½õ¹çŸîÙÈÒÑlƒYh'éô¹_9NDÆ4£B&C¯$ÁÈóôÏ~Ξþ®›¹2±±QVµcÑâ;½îíéÙ¶ítÖ$Q* …Âäk—ÄrÎÕŽ D´fÕÊ‘ðõöV=ƒÎæõF ª¼qÆ~ˆV¯Y?좓ˆŠŠJô×h:4áëÍÙêc‹53Ö7655£QQzáÿþÕbº+÷ö8ÿꆮË4Ânz" ‡Ãúóa1Eªá$Ò4S:+¸$À½ofá[Å‹ÍEl¡èïÿôöÎFiŹÈÒÑoÎÙø•ìb¡a¤S8B²Q€ä°mûÎÿð%66êô¹YúÈ»é™ËMͯm{=5Øj¯2{¥0÷ ëŒý‚?È´›Š9ð!rD Q+/EB}UÎ"Z±ìÎ(‡ÙZÛƒr”{V‘(lõqIÉ‚Xߨáp¢w’¢ÄóülÝJDó3Kâ¼’+²›~¤r{| ðò¿„>J)Æ4£\.ëð9Ž4• íÜæZò¶ÌÙ¦46Ô_xòÉa¡hLØÒÑí¯¾DDK¦-Ü<÷n¡m«?Ú\ÞásdX§ÖÖ`=@’8vâôóÏ=K‰Ž6t]¢!»é™ªšZìlp2ŽcËEÙ:±„ú껈èÞ{ÖŽtŒÃyª(±•—"N¶œ%¢Uw-z)óÏJËÐeQDÖ›'|éæ]D} ð0#I €¥E „À¨XµÛ;X´byîâ8Ïÿš=6"*˜1bò”f[ nR‡Z©R«Õþ ¿¯ñˆÐ–xÜǺ™+U2å‡û?xúg?GFѱÙ÷áá§žú±×ëÉÕç¡.ÊàÓk<âòËW®{ãÕ—ÑYÉ¡´â[7º|úÒD9õ]ÍDT<ï¶aÿuÏ_ö!Ô5±Øj¯úî-eX`kõšõQ[ùË_ÐÅB“ØÊKÞ×ì±étú…óK¢V]{Þéè@¯D«ÕQµ³6áˆ+à&¢ì©1ï¦Çw @!0*b‡?>Á6ÔÇy=…ÍÕFD³gF9æ/ûàË;%æ”gJO#¢­Ÿ *µ¨‚“ož{wdûü¶í;ÑYãq¹éÊÀº(‚ªVI6úÝü§ßný : 9;qšåÝX˜˜µê­n'«M?ìŸþpø¿_~ |&p:Áê7² £¸xxKÁ¿ü«#.Vhj¶ájš„W^Š8ÙRND6Þý°#‡¡×¢ åöó ?v§<}ú´XߨÒÒ‚®HFEŒçù¯¿FD‹²Äó÷Ú<í4ò & mß¾}”ôL&“D"­ëj¬°_ÎY™5†oÌ]ǪÏ?óÌÓØ>?!º]î_þú7,N±©p]ÂkFTëhªëjÔéôóÀý?ý×§ÐYÉaÛöìyÌšü% 9+ž¹àdÏ÷æ®è¦ Á–‹V9k<¼OŒç_n¯"¢ ›6t@˜Â»vâjVy‰ízN¸V·“%5^P2/Êaçªk^þâð]%¢¼Ü˜çÉmívt%@¢ 0*n¥ç:ìmiJc<p±'«³fGO…ÓÖndžúä¦ÓhY6ŸýŸç¬ÌÖ9¬KCý…ï?öX»+—' ÏóÛ¶ïdI<ÖÍ\ÿâoQìoüÄäKJüÕü’§ú¯è,€äð»çÿ×ë)4åÇ9£:cs·Ñœ¹sF: öBݹJ$þ/N"U©”DTÞ^#Ò?¡Õíd»¡£¶êêÐ×Âq£ò’P*Þœl-%¢;—-‹rL 8uâ8ún¤D ëÍ]¼—ˆ¬Sc¾7w¹\èM€D‘¡ Äî½Ýï<üÝG‹,·4vµÅí—6{l¹úœ¬©ÖËMW¢¶oÿ‡%_ž¯ÑêÐMI8vpœÁ¨'¢}— 'X¶Á¼iÖZ•LyâØá—¶mOŽêóz½.Í`°Z3ÔjµZ¥š6íúÞœ[æÞ¼L¼ÓÑqÕÑID>Ÿ¯µ­ˆÚÚÛ| Ãá c;Ÿ}v:œßÿ_OÌÏ,QÊO ¡•¡¾}—m*\wÿ«®ýù¿ýì'O!< zÝ.÷믽òðw];sÙŸ+ߌóo·¹Û‰èK·ÝN#çcyó­w fÍÆTggvaAôÀh_0ø—=ïoþÆýè¦äÙDψ|ts-yëf®$¢÷ Þ¤¢z½.ÃbΚ:5;+ËlÉÈÉ1žŸf¶XÍ+û߃Rúûz¼¶æË---׺º:::cš•Vœûå/~öOßÿŸÅæ""Hl´±«­®«±Ð”ÿ÷ÿí­Ï=ÿ«_þâÉùßø¨ˆÝ±§7l¼Ïš™5×’WëhŠÿý­53K©TŽô¤-Ð×÷úëÛ¿ó?þ=56œDªÕjèFšEñªu4-ÊvY3³ŠfÖ\¨ö˜Ê³UŒ „\.§ùÁ„ ê+³W.™¶pÕŠ»¢Lb=oEÙ§%ó¢#8€tøVeFÞôèwÊÃ|é8:"óvˆ'l¥=žçO;LD¦œ¸ýÒÑ'O);S‰*LÉG­T m½¨£¢ó”ù_¾mËæ¯?þÃüä'ÿúð?ò½Õ+–åÏÌS(7}{Í…ºgžyÚëõ›‹îοC -ÙP_4»°«Ûõj1$…„dTgš=6"ÊšíNµ¾¡êÇL©R²Õ^B¨3NåösD´f݈ úü<_zêtº°©Ž£G@›—kœD´zÍúa ¾Eœ8y Ý÷ùlV­–H¤>‡ N_'™Mi±¾‘mó€øÃŠÑD~[-±%Ìòó¼Ãyuèëeee‹ï\žcÈŠ[–<¥ pT{v¼ñÆ£ÿüzzj XÕ”ÇÅ$ø[j—gÿUôÝÐûZpÇô{‚ç`2uó.á$ƒ""ï«rÖ›‹îX8?ÊlÖÖÚfk¾<·¨ý@ÊíguV.¿—ˆÌ–˜Sc×74Œ&SL8FÆj19\ÈöÀ²Ñ³««»½ÃAD…¦|¢#ñ9ùÈæ²Ñlkm»X[…Q>iè z¶¸#Îw§#‰DEŸîYá ×ëu·Ì*øÊWî˜ÔÕ ãw=Hºz­¯Ç[q¦¬¦¶¶ñÒ0Ý-ÀØh…ýbAz^®>çžµ«ÞÞ½§¾ñòkÛþûo}ŸÜɾ°o›—üƒ<'•(¬§öù?ß[m2™Ðã7ÕÔÔùß#=ëÉŽ×_ûþÿz¢ÈrKœ¿z:}W‰Èb±D?ÌÛÓ³ûí]±K:Fµšã¸nÞ%Å8f7´·§ÇÖ|Yàs€ä¿– «òRDy{M±¹hæ͇?>%QþÑ£GòÂR4̽µ8ÖåmííèVÌc‡’Ë8¹ìzà.ÔßÏöD'‰§»ŒŠók@«cqÆH´±¯/(—˲ æ¸í#ˆ)yÊÁ!0š2™V«%¢#M‚ØÈ#–¨([úW æ‹îƒ Ñê/½kñÒ»X„ôÔéOÅ2=Òtêo‹s6}}Ë¡#Ǻ]óö~p÷ºõøüNž4ƒáž{7%ýŸ©T(Îíèññ·§×ëi¨¿ÐÓÓsþü…ÞÞÞŽŽÎa«Ã«½èõzrõ9z¥&ž6Ø‹5ó¦G~VvÑX±Õ^¬wr¨q6.™¶põšõïïÙ×í¾–ÔÎ]»~øøÐû‰•‘*/E8}nVávÞÜ[¢Lk«kÏwtØgÎÌOñ~d·$,…… ¸yÍŠ½þ’ÛíÁÇóØ¡ô:»Ú‰¨/ÐwµëºlÂ!0š$‚Á>¹\–¡™·À¨?äýÁX4š4ŒiiDTf¯BéØlƒ9²ƒ^°QQ‹yÊ_YXòåùb¯Y‰Úš/=z´®¡1¹ZlÔés—Ù+æg–°*LDtøããSÌæùu>ÂB£Óéo+Y@Dù³æD^d;cêšššYœ”çù“Ÿ]½f})'n‰ƒèF Â’’›§7 õ÷oõå¿yðoѧ£¤T(’i¹(Ù ½bÙoïÞ3ü—”óš¯Ç+öY¨ ­òÒ@gÚ«rõ9[î ´â‰(‡ÿøpŠF• +xPã¸$Àq€}»E)Ü7ü7N,)`¡øR’ð"ÊЦÇí7Ú\mD4»°`”ÇüèºIì"5—N¶$> iÖ6ÍZKDîÿ@˜yEo;çï EÁý IDATzð‡ÿhñÒ»’éþ''wƃ}û_ž|rõŠezýõ¿«ÝÞñë_ÿ’ˆŠÍEs-y ?É“-çX¦yÓÙ+o¾ýn}]->Å¢ÀvÆÜsï¦Gÿù±û·Ÿ?úÈ÷–.¾ãRã%"*HëIA¨T*ozpuÍyôÝè±å¢ÕŽ Iöw•·×Ѫ»¿6Ò5¦ðëÛ_Ã@¬¼ÑØÕÖÍ»¬™YE³ £vâÔg^oJ¯.ÔétDTf¯T¢ØˆÑîþ»ù2>¡ñ‡Àh’è ö‘AiìÚZÛPž^ìŒiFFÍ%½R³eΕL)Ìô·ÎóøðàCßNâUÒ­nÅêµ?ùÉ¿Þ{Ï:½Ütåùçž%¢u3W&<6ʪ0Ñ£ÿøhäÅ?ÿ×Ë…Ä('wÆ=÷nÚxß7ˆ(WŸ#ØûÛþpxû«/£¿F#²ÚëŒ=Ù£l7´N§_8¿d¤c/!ö‘0¬¼4K.±fÝÚ(ÇðÀ©O>NÙN”qœJ¥""Á Ž'ådgÅúÆ+Wšñ!ˆ?F“D°/织ï*ååæþ-ûöîEO‰—N£È–7'ßX¸J%SVT” -* ‰š-Ö¹0/½‹…GuZmiŹÿð-Ÿ¾Ô¬Iðsš ûE¶æbAɼȋÏ=÷[_g1 …ûûú‚D”m0 ö$±ht´“ a¯ö§“-åD´aã}#пûö.\ !ØÊK ×ZÙ®—©™Ñ&“{öHÙNdëÍ«œ5‚@®ç§Ž½0}WW>¤ øjú’Z­Q (º*prñœê R©T¯ñîZ(@D½>†»…ÚóRIX«Õç÷NÆõ)Ò«hB.¡Q¶§D*ÑiuD´ïÒ‘„ÿánYnÕXê/¼ðÿ œî¸ý¶â¿Þr¿^oLÍï’5kïY³öž£‡?Ü{à£÷°zÍú-s6¼X¹#±Ö#Í'6®ÛrÿçjŸb9žBýý¿zö׿Ýú[|©ám 8î ³¦ ù“S¹ÇÇОáp?åè§Æ-£:9zœ¹úœÙ…£©6ÙïyïoþÍ·’ãúœ¼ëG૽ƩÕíŒ<™)ziyÅ·ú»Ô™' œmJ9.×'»öXy)"ê«vÖÎÏ,Yµâ®(+º]îŸ]¼ä®Ä¶gBµZMD'[Î ö$;Ù¢ØóÀ^¹buob›Üãg²Ì繡/ʆû¶P)Et‹vL—DŠ‹M ³Æ „ª8#9õɱ ÷«fëd\Ÿ"½Š&äe{J¥R‰DÒì±Åó^tXwåÞž«Ïñz=¿üõobJg>yfäælܸá¶Q”æHz_[¿é«ËV¾ÿî[gÏžùÒ—¾ü¹ë^­z/çÓØÕÖì±åfæ,ÿêâH"ZÞÏÿâ?û÷ÿ5¾Ô„ÿ&pò'£ÇcjO‰DBDÚ¸®õ1ú³²ï<ü½ä¸>'u òj¯ñ;ÙZºnæÊ;—-)0 …J?ýä®åw§äM©4×§”ãèÆÖ7Á*·ŸŸŸY²zÍúoíŽ2Ý=xð£ÅKîJl{&j©ëjd5Ž„iô…ûq¹Ý¢îMÌj’{üLæM4ÂDD¤” ú)ÍᣧĈ݋²­a 4×’7?³„ˆžyæi!DE•Jå[6?ýÌÏÐéô÷?øíŒŒÌk×®Z5–»ó\þú~ÆM›Áhm³ÿé/ ³DJàS¾`ðôÉcè¦QL*Î&ñßXëhTp¨]oïÆÅ€Ëˆˆ:}ÝB>Iï«rÖÑò¯.ŽrØåf›ÝÞ–šH¹½JÈ'õuó."J3Æ–ZªÛåNñ²Z À(ÄU·Ë]YQŠvÙ0!•Q—‹š5†åÓ—ÑóÏ=ÛnO| 9·ÌznëÖUkîÁ2TF†5Íh ƒ /Rßêv²"ƒn->9]zè£ýè)q ‡Ã÷úKcHªþþ$U¿É¤¢ÊY#äÕ^¢Ì^IDkV­逞_õ¹ \ñçò¿üªõD´aÓæè‡íÚñzJõ‹Š aÛM¹n"2™Òb}cCý|Hâl˜­ôÁ`0ÜÍ —Éd2‘Nîû¹H¡”Hâ¸v}aƒÀÇGÝÓ[ä ù¤^Ÿ"½ŠÆ| ÅÔž )U*JôrQ'_›¿Œ•¡iWZÜ ú‡|`Þ—ng 8ðâ™ØµØ±.˧/íì¹–À'[ÊsçälØ´9²›žymûެ©Ù³fãKM€ßh½“J&üóžÊ=>¶öäÔ\œÿØ1$UomkïºvM§Ó‹ýúœ„ ÆõI úÄy"çûgì–L[¸øÎåoìz«Û5ü—à¶×¶ÿâ緦Ȕ@ÊI#+›ˆÓr×ÑÛ)ücOvsõ9Q2ÕQye•ÇãV)Õ)2·Tª”Dt¦½Jø§jsµ>?õ@—b½YÆ<6¹ç±?“†L.cX¾ðâÐã<ˆå¯2 :qfŸ …ú¯v]›Àh1›EQ5«ú|]¬x¦Õ:©×§H¯¢1_B1µ§Ñ`P àÁì²¼ù¬àÒη¼ï,fÞ|K£Õ±ÆW*&“)ò¯û¡Né&“Z­^›¿,ÉFGºµè‡ŸÿÏžxâ V@ÿTŽDv?6 Ÿ÷Tîñ±µg¦ÂÊqœÀ3ªÑ[oîX¿ñëb¿>'cˆKÔ¤bMþ’÷ëâZ@2ê«rÖ›‹î½gíH%t::••å9¹3’~üÔët‘¼xÁ¾`¢®O£Á W(l.ql?¯q\ÌÕçl¹ÿÒŠ'¢¶û7Sd“F­V©Uݼ«±K=èx(ÆÝ×'®ívñΩ0Mâñ3iL1¥\(Æ`+=Ä[ ¨(ûí 7Ê>&r¹h¾)«Ø\äõzþøâŸ˜ZT¡PÜ{Ϻ‡ÿáAÅÑÎÕí …BVå+Ùʼn½µ ¢-÷?0èõ^¿Û+/£›Du÷"Á§%¢Š³U謡´ZMB&f¡Ð”ÿÔ.,ê¢%w Ìs=ÈpaÄs.G‚¯¼Qëhêæ]Ö̬(™j‰èø‰Ó)Ò}lþÉVq¤eëì¹FDÖ©Y±¾±££U€8C`Æ(Û`&¢Š1% ­®©EŠ‚F­æ8®›w%p¹¨‚“¯¹‚ˆ^핦µ˜§|ÿŸÿiñÒ»pUÄ$î¿võ*-™¶ ‰½µXP2oÐ?]n¾²ÿ/`bõø|NGÚaФB"‘vøñŸTÜ>µˆˆeÇ»R¢‡÷Õu5Ís=PCãe_—G|Èå2|å¥Êíçˆè¾û6E9†N?šô}§T(är™?È×:šDqÂl[ÃR6ÙZÛðQˆ3F!êÑ¢`0(Ñf×ä/QÉ”¥Ç÷<üÖ¹syäÍ+.‰1ƒ^¯—ˆÖÎ\–ÀÓ`—ñˆ9‡#Ç>±5_FOÀÄ*û ûc†™T”Ûã]Œ^¯Ô›‹ˆ(MiŒÿ#:V;;J 0…÷¼ÿ.8qœD"E奈Ç%/)Y½¸ù‘¥ÈÂjš‰E‡ÏADS3c¾ƒÀs5€8C` \¬Å3¡S*l¹hÌæ›² Mù^¯ç¿þë¿u÷Þ³îÁ‡¾íóãár»ûú‚iJc7Ô7\ke·ÃNO_yeìÀĪªÆþ˜ÏEö ÄRq{æ"òz=Dt{f¼¿†ZÝΟC§ÓݲQy³âxËäD$ŠÊKŸß4…ú껈èÞ{ÖF9Ìãñ&÷½•B&S(þ Æ.¦Ší.ÞMDӦƽêÀnz€¸B`£¾¡ p,Çsµ#aó'_–»˜ˆ^핑ʹNî (÷ЃØ>?1SCW7-™¶P¯Ô$êÖ¢ÚYKD«V Ó¡žžž;w ›`9¯]׈D%Tpò[Ís‰è™gž&¢BS~ü¿†Ø"Ù¡y®#Býý{?Ø‹dÒ/¥‚ˆÄRy)‚eª]½f}”LµDtð£CÉ<€èõDTßÝõ‰è´;{œDd¶Ä¼PwÊq†Àh}Ù³lâ=®øü:£RGDŽûØÞÞÔÔŒ.2DZ²K5΄å=X4m^šÒ˜¨Mô󔇿ó÷·Ì-ÆÅ0!ø@ §§‡ˆÖä/MÔ9”ÛÏÓÈE0.\¬C]8˜XÏ× (¡É¿œ9›%äi·w|¸ÿ"Z4íKq>‡Ñ”Ð)-¯Àu§{%‘T^Š`™j‰(J¦Z"²µ¶%ëþëÈ] ‹‹ˆÍÓNDsoùn¢­½X€xB`4ÙÄí1šA¡'"‡Ã1Æï d•6¶\´®«1Qi˜ôJÍüÌ"zýõ¬ã³˜§<òÈ?æäÎÀ•0‘3{·'îÏÕç䛲s7Š`,œ_2ìo½ó–wÀjhDRu¢„&¼Õ2›ˆÞyç]":xè(ÍJ+Ppò8ŸÆMKèøz{KO}‚KeR±ÊK.^|_ô,SíÊUk¢¶oïÞ¤ì8NGDUÎ%‡eܼˆ²¦fÇüF·X€xB`4I(d2"êæ]qû*™bœ?iF…ìúrQÇÅD[WøîÛ;â_‰>';ë‘GþIE'\(ÜïvyˆˆeHHvI/_±rØ †‚Û^y= d,´áÉíq}Ã%t™R¡HTrÀ¹–¼4¥±¡þÂå¦+DÔn﨨(UÉ”E–™qÿö¹y ÃÇÕ2y8‰T"‘ÒZáâÂ2ÕZ3³¢dª%¢º†Æä{¾ËI¤šˆÊÛÅ·ŸEr­™YÑÓ åp^Åg žM–ï NFD®@ü¾é-Z3]¨{$Oò= «ÐØ•˜…½Ùs®>ÇëõìÙw0οúÖ¹sýçÇ$^_O(J`¦Æ®6/˜5{¤ ¡—›¯`C=€±ÐF<× eh¦QÓ¥±¬ýt¹Ýè2¶¥Ì^ÿ䀋²Ñ_>x?òÊþ½ûˆèöÌyq>“HžëÿÏÞ›‡·q]wÿ_À b!(@€HA¤ÅÅI”ÄÈZlk·$k±äÚq¼ÄÛ¦mê6iÓ´}ûKÞæmúô×öý5}óÖmgkÛ±ìØ’,[«µ‹ZBR”D‘¦ER"Å ‘Xr@‚üýqMZ‘Eˆ ;x>Ÿ<63ƒ;sï™sÏ=ç{”йÝÓÓÖzƒ&LŒP©UZ}m zýL©öñ­ÛÂM³`ðØÑ#I6p:½N¡Hiõµ%¢G{lÊeF^‰ÞÁrŒ& üÕÄ‚ÀÀ€4é_ ñ”8_Ã4õÈç²&{€½»ß‘$‰g»%Eó^xñ+4bJOO€%¶…ü3liºü¡òñøõnJ¨'ˆ8E©Áp•€@`’®Øiž#£dy®)3]4:•5WÆþX×pÍéèLüE]˜Îõ†[Ãþú½÷è1€«Ï ×Ï”jóò Ã(Õ¸t%Ù^8£ê¢Õ zýlÊÙ³"~áܼI9‚äM»S¥à ò“#I¦’æLâ)ql;Šc<Š,9V­Åéèc4IYĨ·›OsY3€¦Æ)iE‘xJ|’*jŠgÀ%—À9K|{ëÍ×y6J^Qžx½^È4êxYuàâ‚ñŽ©ºx‰D "Q*•¤¡ ÏFg¦™¸]“\–wv9¦íxÉXKzL“çBÕÝÕÞ/TÕøý¾l½Ý¬5p¾*¶3·}ÇSã Ž`äÍ7^§'=¨ÕjÝ}·÷.:†¤¬ t àÜùäQb;+g;*÷˜/>gnn¤'¶´PÄ(Aðƒ£É€ R))½’‡›'‹ém]onœâïxJ’ªMÅè¦4X„»ßb yE9#{Ð(“‰X¼¸,Ì1ïïûFŠ âÎàÝ|“aE•ÀÝÓ;¹Ó=Ï´/¦Ì#K¸h‰%ãhòH’täЇÏ*æ|U^w«¯M§ÓÏ/zp¼cšo´Ð“u”ж­’ :•Œ`h°±· a•j¸Ü·’cs7UÔ°pÑzW?®>€²²òHOì%‰j‚à9F“c hóñËÕš™–hldQºPÂòè›zäIT\l[¾á¢ö¬LòŠòg,hT–Ö?ͦ_¹*Ì1îÛ·>@#Eq‹ùjóqÕ(Ÿ¢¨z—³{z–R‘’–¦{åòD/jKÍÅŽ¬¸çGŸPj.柸p±«À3Ï>?ÞÃÃûß}›öè’è•—Æ`Á×ËW® _åüäéÓI0j:½@µãJBßE04Ø+y„óý<>-“ ‚äM´¬TÎm~ñövýlÍS÷¤Âôñ†¼yôY3Så.j1Ïxé÷~ŸÆ?R0888¤Q‰E–þ­³lzN¾‚Áñ“§ió† â 1Êp¸1EQõ¡¡¡é9Xcµ¤ù‹.Ÿ½ÀáƒûÆ+áØëñVœ:€âBsO'“s)/›?Þ1Õ/ÑÃ]½òÒ>)À‚Ž×<º"Ü4»Þâv9úNEAa`Hªs]OôQó½L¦ôHO$Y'‚à9F•R©V«†¤æN%éõ¢6]4úý¾©T^"â–Gßx[d±­ÀGGršÉzÝ×¾ö'Ú4»,øý>ŒJÊò‡eÓ/Z8?Ì1ƒT…‰ âl ÀpCƒÜe2”NÇ”L¬é¹¸•«–´ Tç§çxÿƒpQÿ|™˜`â#«W‡ùúTž;C|4—K‰_yé³ùÓ^ `Ýúá;°Bß&â¨r\âùÂmžN…y‘ž8Ík÷OÈ1šðèt:Lq†vÃL—/FA»³«‹F0®`Á8M=2¨}ëEm)ã'¾EýN_|áòŠÊH ¿? ¥‹FVÌ3÷­MϨºx)Ñc."i`޶6/×…"íìê þkI/²jTbÅ©c½žp }7Zn656È’¸Ðt»c`H*++“µ°ÿКEQ$ */Ñáuß7èÀµ¦æÄÍz«ÛVçnN‚!ó}r²#~ÕܦÂôÁ rŒ&6JEŠV›  º«Ž[£y¦TUUMý§‚R1~T*¶Œ‘E™~±mÂ&¾E—ç¿ôE{ö4èòÒßßÑœq¼C’Õ–y_ɧ÷Þ{—FŠ â– ËY°Ò®Ÿ þê”B>§aÔ\µ¤¥š²€Ðð|¸ï}ŒŠ›ó$¬r\ððŠeãèï§ ¥Q\.%Aå¥;¹oÐ1€`0x®âtB¿@d©Û <’€uVf¤':§«D5Að‡£‰Í˜~·/½ T³°¾+õŸPÿ'ü«xÝI‰¹À‘£'8´µaíê‹JiÄe§¯¯2•¿Àh ýü’¢ð‡5_o!'‚QdÙº›™fàvM)ì±``Z ÖX¸(ÿZÒyY•XSSy£åæ}®¬¹â÷û¬Z ÿÄ…‹Ž6n ³9·ëm*ÁXå%gÀ•4wTïj¹oÐ1€s¿©LÄ»S*RF…8.'Çx±Àù¼üˆ.7=¿ÁrŒ&0cå>yê7åed¨8uŒOXÁ&0Úæ•Aß ×”©Q‰M „kKŠæ­Ý°‰†; …[æòoMõ⢢ûy䣣4X!/LoŽ©ód¦Ö  ½‹$5",þá¢Õ­>uüøß»ûŒJœó$¬u×ضe\ƒÄå¾E£‚Z¥ÐHªà»ûðùü§O$Ü­±bô­¾¶äe0¿ü,›5²E0H‚NÁrŒ&0zƒž¹Ï(æÑñƧ£·ePR+¶<àØÑbÝÅ<ãÉßyŠÆ:~ͦ/äßt›·À‚E÷¯þÔÖÑIA£!#czsÕŽ¹~•ê¨T›œVŠêcµ¤ù›E–œtÑèttVÖ\™à)ç.T(0åêE-ç«eÑpËW®Eq¼cÞ|ãuzü£ð ‹’E`tŒ‰¨©¹”X÷%KÜ<’@Fº1Òo¹(›ž x@ŽÑ¶;Ù†üñ–sÜ+­<ú¶ŽNÊø™Qà^íwlåÉæÕ…ªšØ6$_|úi*¸WúûGF†­Z ÿE©O 8.N?‘ | %a½9»Á ±±aŠ¿3­Õ™8 ,µ¤Ù&ë[oFàLìõx܇Q¡sÎß V_›N§_óèŠñŽij&™Ñ( ú4bôV2ÝÔXÐñÚÕ„_j%Öή¨ùÇýp »Ï `ΜّžØØÔD0AðøRP$"JEŠÉdp¦ýO±­bs.8–Ç!xŠZp®öËà¦Ï°qÃ:*¸‡ H©©©y&{ƒ·rq›·Ýªµäç>pßp0¶´HniÚÌYY›6¬™Ü¹3ŒC‚Þøàà` ¿ŸžÄø5U•J@Ĺì»! •—¦‚JÅÂEY8O² æl½Ýï÷M<\”qäè‰ ·–˜‹Î¶_áìÌ=Û^=ϾnýƇÝ󀌼ý«7žþÒs4µ¦‚Z­Â¨Îc2q¶ýr©¹xýcpàHú7•U d½°•:W²•²pn(*)ïažž^z„ÉŽU BJʧ*µjr—Jæî}¬Mê‚D$cF†R©t\ç;¸ë¬ÐçéŠs4I¸˜È$0ÊGŸ!wnΊ‡WÑ@Ç!ýþÔÔÔK!Ç(‹).*:Uqþ¾'ÖÒbXm™Ï½ðÒ4œÁ`,Å8_'+)µî:þ~ »a6€†k°3Qtz=€«îzþá¢L'”i†FD—ÃYSSYVVž—‘ŹZT‡×Ý+y¬¶Ìò²ùãùs/]©}úK4³&ÏXFTòÝ :ÎÖÛ—.) cÆ\­ÿØírš-Öø¿#ë¶ÅÞàì9++ÒÝ”JOvìo¡R©tºÉ¤?’¹{ŸŽ¥.H82L&¶¿çÚžíYrXyœ‰úœè’#+“4N`Ûéì³Í™èê3ÜAžþË4ÊñI¿40–MÏ9Oö™ÑŸÝ÷àZZDŠW œi¿0 çžQ£+5Ó3ψ‚šš:0$ñ/O¬µV­Åï÷EÑìIòE…LR°Õzòû}ÇNVLâôSÇ—••/Ï*çïŽ9ÛQ¹yîºÇ·nÏ1þèÐþum¦ 6Iû6+/q±«6[oßþÄÎðû»Ç}ê‹ÏÆÿíÈX·-Ö0ûÖj‹xåërߢ§˜ìX2wyØ0Ô‰E†ÉÄVo}¼—³úüpßû4 ɇ R))½’‡ýÇ\S&€¦Æ†˜æÑïܾ•¤EãI j4þÙô>)Ð+yÒuÆt£¡×sY’û÷¿ðâW’Ò^çœ'dÌd)Æ3cÂAUŽKü?OvÃL—/VÒ@L–Ë_ ÀòÙ œ=sbr¶Deͧ£ÓjËÌ5e6÷p•¿¯wµ,Ïòäå>3g<|Ź ä¼‰›Œ•—ÆhîédAÇÅ…u ׯ;ìÊÕúÇ·øãÜ–±nXxo˜'}<ÚZoÙ±dîÆ*¾”H˃c^QžÒ¢˜T¡O"P©Ùvº êKyÙˆq=úܹ9eK–Ò(Ç3¬6½Ý C9›öùss&rðµ¦æ@ŸŸÆ‹ ønJ—E8èÓÏ™—d2SY¸¨,±½lÉ÷þ&ý#{÷¼`Ñ,ôR®ºìܹc¼ýýµ—/Ò›¤‰›Œ•—î„ÅWnܼ)Ì1Á`°æb¼¿Êd¬ÛƯäŤÒ%ÝT˜ž b9FA¥ša6k4Y¼¢ ¨Ð'‘HL`Ûé28FíúÙcVwU„;Ÿ¤!Žs‚Á FE8óiÐì9¼Îs§i¼’Œn—³âô ê‡x#Ýhdfgá O¿J5™—dB§×¸ÖÓÌ?\t¬4èDÿÇãBUßïËÖÛõ¢–óõ_t4 IeeåéÆqëiì?pˆæØäHÖÊKc4Ýî`óg–-œÔÏñ“§âù.TJ%[Œð¯ÛÆÑ༠Àb1GzbGg'=È™»±†£ €Ñ`°Ìœ©V«œ—,^Ñ2Ûƒ1 54¾ña5ª´ùxW^Ò‹ÚtÑè÷ûî[|Ò¬zxERŠB&C¡Ðàà€,ƒ™sÓlÚç̨OöÜo(¯6Ùpu;jj.Q?ÄÚÔT&6·»ñG€¼Œ,§ŽÅTæ%iP*RÒÒ´ª¼c{¥:*¥A%I:{æF³òy 6ö6ضeÜ ¿Û==m­7h¦EJW^ºsþT9.X¿vU˜Ã|>MUüŠ0Ž q$k¸(FÖ'npŽÑÒÒJÏ2Aæn¬!Çh¼/ lV+«;Vå¨ÙU¿Ÿ¿WTPªWd}À+ÿñJÔÜdJ§QŽØvº7éÜôzÝÚ ›h|òJìúY¼­„>€üü çK brôz½´‹WÆ“Ýý#¹â¼Š-‚òè'LjjªB‘Òêkã?^Å–¹•XSS9õY,¿Ô\,(Õœï‚élظUÅñŽÙ³w/Í´ˆí[î•—² æ"KçÛ¬s/ÈÙ IDAT7³ù&è@ÅÙsñ9LcuÛø q”ÙŒ[ƒóN…že‚ÌÝXCŽÑxD©Ha.Q“ɤT*{%ϯ>Þs¢µZ–=´Õ9K¢eqÞÃ’Öhh¸ãa¾))-˜È»a€ºúúýþSã+vñ†4 °yËŒCƒC’N§¿œ¸“Êêj¯$Ãçó?yêƒ÷w“½(;FƒaÌ+Ê¿D8C/j³õv¿ßGyô„åÑ_ì’A v±m>€÷ÞÛ…£Ç[SS `‘­ó]ø¤@­»ÀšGWŒwLGG‰\GŠJ­àà×oFQ·Ø¶@®ù³lé’0‡µutÆgÜ1Ëà_·M/j×f?Ï瘉BÏ2Aæn¬!Çh|‘*j2L&«mæ˜Ktÿõ~ré¹"&X 3¿ß÷ÓŸþ<¿?{ölô8±[}mü›ž©‰˜ ŒÚ³2,*¥ñM˜Ìh¶Þοig7" `o¾ÞB«Ó¤4OWœ£$#Q*R2L&–%#£WÀbÛ 3,3iÈo5ªÔ-•Èy‚Yµ1ݾ}; n…Bœ-T†«Ï  ° oâ§P ¦d…’ŒäBÅ ³955u`HÚ}m¿ŒÆ€s€#G£6X–h²ÂÄYilΰм(–½ÑrÓéèLü³¡;¼îV_›N§Ÿ_4nnïµÆ&zWDfj FS˜ù`I3Xlã½1ïxï;\­ÿØírÆÕÉ%Ä!(ÕìU/ªn¶y:#58íííô8dîÆrŒr%Ýhx gNqaÁ¦ k¶oßb1›³23-3gÓF¡Hq\UŽš]zóúCò® ¬ÎY’.›>£&¨*N< T)Á7ÏhÔv4`ikÑ_Öͳg?@ƒ›X ˜™–Á¹]ä ÕFP‰¸æò¯¤„’Œä1FSRR”)cE&ùÞI‘%‡)Å®*`2‘*jX¸(«5Ë`¶j-Q/ ÊܬLd–3u®O<óìóãÞýîÛ4ë&ˆ Rè•<<µÈ¬©3˜rõ¢6Þæãü¹³q5Lr q,²jT"øªÛ{ƒ>‹%Òo÷ôÐM¹STÔ“&?¿ð›ñõû¦×éóª,÷Jž6_{›·«ÍÛ-KéÕ{’kÊdIô?zõÇ1jž•I³(. G¶¸Å¹]fˆ´\oŽÅoÚ¼™F6á0S;£\Ø“¨êrßr»œ´µ“¬ÆâéŠsö¬Ì¯¢Þˆ5 …"%åÓMú*GÍÙö+²—$^žUàÔñãQṳ̈ͬ5x˜S£Ú!Ã^ÑòÙ‹|tä`töJý'~¿/[oÏ2˜9‡°Õ»Z–gy¬¶Ì₺†k÷<æÒåÚO>M¯Ž ­rÕ¬ò¿A”jæk°|ö‚CÍçâmþ¸PY½fízmš.ÆHF!Ž1Å £†_W°ø¹¹ù‘žètvÓM¹ÛOuÁämA¾¬¬<¢S†$¦-Òæé”BÁîÀ-WŸGö5Àç1k ›æ®ðæë¿ˆ]ÄDrKn%Ôº4À@(ȹ]fˆÜl~Q¯’¢yä±JDt:KCã‰W Èœ•ÑY—k.®Ý°‰F-YaIFd,ÆQŒÆtæí•<®—KNýNÆ4+£„Q@zb ¢ CRë:ç¦Ç d;YÝ_–$iïîwž{á¥K>ÿ9y¶£róÜu7oϱ5 I•çΔ/[IïûÂ6þ»ûø "Ë…r::­¶Ìüô¼ãÊ*Ϋ¼jÇ•µÙ‡™?‚Á`ÍŪ8ùºÉ%ÄÁ^õŸ^ƒÈOÁ‰½Rò"/Lït¹é‰&ÈÜ)ä ®>ϯ>ÞéK0aÌ¥zSîjJ<|pß©Šó±k(3“"FãµZ%Ë,e†ˆ»§7꿼j½Ü¦1ÊÒÐxÂBõ­¶ÈÞH5—¯c4‰aIF===&“‰ìÅ(¢T¤ˆQ§Ó³OÏÀTÑñ›G¼gá¢QÔ¬d$«¢:sjT9.ñßã_>{€#‡>ŒV¬;9w¡ê¹^*5Ÿm¿Ì9—«évÇÀ©¬¬|–Í:^hÂÁ#GÉ1:1û–wå%– u¶âTÎÜܲ²òE¶Âó\3Äë\×Wd}¡¬¬<ÝhSâøÉSñð]A.!öªõ‡¯|õ^æ\öÓpYµ–0ø= ƒ”¨D¹SHct2Cƒ^÷ÄÿI¬»Û˜»Òªµ456ìúõž˜6ô`á<šKÓfˆD«’ìgViV&©‹&(C¡J”jÎM÷J鯢X6=Zr‹T¸3Š*U†ÉdµÍ4™LjµªWòœi¿ðꥷâÇ+£pQ$©¢ºJ©dᢠœ›Ö‹ÚRs1€£ÇOÅä‹àñ^onPlÎå|kÁÐ`•ã€õkÇ] úûúÚZoÐ+åþïî•—Ær¡Þ{o7îHÖæ9®ºëlÛ²)ü×-ªœ³•«.Þ/,ƒ™½êOUœ÷û}ì•­uä‘nŒôÄ[.ʦ'ÈÜ!ä%~‹Çr—˜r™´h,6á?3jõ:ÚõŠXIzgÀÅÛZUª0s$º¬X¾Œ†5qÂh2O€½»ßa™‘.— |÷㻽ˆ¼à'ÇCÏ5Aæn ßK4ü¶W4ê±÷4V(¬/^^*gÃñÓ5• ÐÒÚÝŸ]¶âaÓ„†9F™JWB?¥]‰XÓëõž:ytû¿“4w”9+kÓ†5‘Y £A.sæ<0cƽWûC’³¿»ÍÓÙæërõyâ*Y~<6æ®Ô¨ÄŠSÇ¢.{ +éJM*)9ÂE1ªÛÈ4cAA^®6M`p0˜šªIY3ç‚Õ×–­·/]R6^Ô¦f’ ÿÊK̹æìêdÿ)IÒÞÝï<÷ÂK‹m¥Þã<ï½Ãëfó§¼l~˜eÝÕú}~6Ûy¯dÚY“'>v²‚ý¥áZK?çõä ~hëè¤çšàcîNÏ:õä%x{E™ÑIÝNDܹ9²˜wD …Dçv½A‹Åé‰×¯ß Çè4ÁçótìDŸÏg±XÖoÜ’wdµe>÷ÂKSügÀ5põ¹†‚m¾.¯ˆÏ˜ÐpßS&SWÿÕÛ¿ŽÅïÛ³s’ìYÐéu EJ«¯ÿX³YM ±pa36mÞ<öï### …‚¿c ÀÙöêìyöíOìÏ1:‚‘Ýï¾½ãɧéå|OÔj/Ç)jÑÎÀooùŸ»PõÜ /˜rõâÎKë“l½ý™gŸ¯¬ù«0‡;zd˶œ‡flg…EFódùìÜ7VHƒå§[Sgò¼ æ¶~ gN¤ï±¶ÖT`–à`îNÏ:õäîŒyE›¯·ði”òè »1£û´Ñ¢|ñbêXbrx$?‹Õ±uÛÖF½7}ðz}‡Žžx ÛžèŽQ¯8Ó~a'Ž…_ICAwÀ›c*(Õ«³Wxóõ_Ä"5[„$+5©T¤¤¥iœm¯æß:Klÿpßû±2P‹æÝ9^ÃÃÃJ¥RÇV‡×Ý+y¬¶Ì0A•UÉ1zïõ­R©P¤ I÷«~q¦ýûˆÆÎ=Êj}ÓE0Òg ¦‚«Ï ?¿pçvþvx1èõx=Auê³Ö°fÎÃ~úêŨ¾9€‚ “©Ó´©©J¥²WòÔ»Z87e0gëí~¿ïBUMŒšX±|Ù=ÿ>ÈâØPå¸`ãúuãèïo¼VOó]°’ô<Ó¡Xéy{x÷°Ø6Ÿs'Cƒ½M¶mÙæ0ŸÏÿI}-·«b;+ÕÞuÛŠ,9•XSSùù¥“…eUaãÜæìv¹éé&x2­êÔ“c”ø­/èùŽÚW/½u—{4üNcD”Í£ò8D, <ú$C/j9¿ýèt“1‹IftÚ2Ý’Œ’ A©Þ”»Z£Ü»¼l½^—dzpÌ©ÁR¼9Sbɰw÷;cUS¢>Xã#ÃÃñ…Ñ ¿¬ cŠïÝ»žè»`•—º½ÜZœ©Àå¼ÇFi]Ã5§£3]4Yr8÷ÃÙöË–¯\%Šb˜ÃNž>ÍçzRE\;+LžøÔñ{TQc²°L"–›Í90$étúH—Ø>ŸŸžn‚ÌÝAŽQâ/ë»Ü£¯¼òŸ›6¬ ÿM wÖú$ˆh‘;7‡:!i`¹ô¾ŽÑ©àóùÝ.' Ü4ÄçóSÐh‚²:g‰UkijlØõë=±k%ÛnO¦NA.§†^Ô–š‹;Y«)ñè#ã~•FFFFFdqlM$èÏå¾ER×w"Kå%–ˆÝÒÒzÏÿ÷­7_Ply÷GJ \ëiÖéôk]æ°æë-|Ì^ Úq…s?äš2ÃÈßîõ`T"–L×dJôDžá½1­Ì]rŒãšbÌ=Ê´GŸ{á¥ü‡ïM1³þ®ZŸ-Š‹(ž“¶Öê‚HÊ*-5ûý¾½úã…~jö$—Æ e]8Ãj>¸/vá¢ákï AÇ&ôwèÐ!z®Ç¥ò’%Í  ­ãÞª¦Wê?ñû}Ùz;˸çIµ£ÀºõÃv`ÿþX_‰(‚ Iu®ëœ;aѬRŒº§?O—ÉQ‰Xn¸úÜ ò"=Ñ}ë=ã È1J„#<Ô|îWïq\V[æ÷¾÷O>±eÒ¿Fá¢DŒx°pu!#T'” …"KÎÊÙKüó?ÿ¿l=#AH&—1§ÆEoǨ Tç§çxÿƒ1jâ¾uA‡‡C##ÃÙz»Ykà|û úkj¾è£ÛÑ #Gå%&ßÙuïWŠ$I{w¿ƒQE®ö‰×Íqåeá´ ®55Çz ét:UŽKL¼ˆcòÄWêÇ-×ÔØ€Q¡X>tn°X,‘žØI'AÄrŒú¦þ²vï™ö v<ùÌwÿç·gÙ"ü\²h!…‹Æ!L†)¡Ñëu4µy/{Ž ˆ¸"Ë`ÞŒ[¼e˜¢N’‰¸‰ˆ“ê„DÜcÖväo°ûÝ·bWpiŒ/”/Iš®sjð°Ä¶ÀÁ#Åè÷ç—M¤.¨ßï‡LŽ-ô§ÓéÃýÕÕ7Ð3Îà_y‰©¢wvu„9¦×ã=|p€Å6ÞINõ®¶| /‰véJ Å+™G­»ÎÇwÅ1Ayâú«µ,Ú<jeeådpDœ@ŽQ"Üïkµ{jÝu:þü?ÿsÓ†5žI B7ŸgîÜh y ƒ”ÆHñŒYkxfÞvV†þÝ=Ä|5®×=XTšÞ;0$•••ÿ¿þÖx¾ÑÖQa"vX-fê"¸ÝÓC@ñF‘%çwKŸæì-)š—4òAJEŠV›  ºK†hÄb˃Þzóõý¾=+3Ò½U¿ß`±mÿÞ¨s]gVw˜ÜÛ#ÇONóG^¥b£·x6Êj]Žû;F+k®8é¢1הɹgXÄ÷ò•«Â„³øMeUtÛ5¢B‘Òêkcªš<‰HžØéè`Öò eõÁr²s"=±§§ADrŒ“Çð¾õñ^gÀ•—_xOßhîÜJ¢'bJNåÑqÕ %ˆx£Ìö «AÏÓ+ `ÓæÍIÓ‡:½Ž95Ü/禳 æl½Ýï÷]©ÿ$FM¬_·6ÒSýý##ÃV­%ËÀ{_6¼ê®°~í¸¦µÇã™æi¶jµ@wßmž@SãD‹_íÝó€E³xkû¤@«¯M§Ó/]Ræ°«õ»]Î(¶ËŠë\Ÿp¾ßHå‰Yí,QÅ»0}^AaÄ'z<ô}'ˆ¨CŽQbJ¸Þ]õûï鵘g<ÿü—©‹ˆ˜b2™¨ˆx ×ë¥N ˆ8APªË]¶6ûa?øþ¿ðôŠF¤Yÿ°سíÕü›^l+°w÷;᫦LšIÈêë Œ]gªذqk¥È]oOßLJE ÓåéÇ7Š:×›'xü…ª¿ß—­·ó Nd°yû;ÃvüØÑhµ¨MMU*•½’§ÞÕÂùf#•'n¹ÞŒÑ:ZÜѬ¶ˆc‡Û::é+OQGE]@L‘`hpWýþ/—>‘—_øòŸüÑ¿~ÿAøâÓOS%z"Ö˜gÌ NH2i(˜X—íó%p‘PA©¶¤§ád›©¥H¢µO¬·j-~¿ïßðou ×x¶žLá¢ÚÔT…"ÅpñÏÕ‹ÚS®ßï;v²"FM¬~ô‘Éè÷ùu:])W/^଻ꓵîºRsñ²¥K>vÏcÜîÛ>ÿô´ÀUj¸W^2z.—k‚ÇK’täЇ;ž|fñ¬âCÍçx^j‡×ÍJx•—Í£Û{åjýã[¢3…t:=€³•œgÂ$ä‰].7£†ëƒÓêkËÖÛÈ™3Á°Ö1ÚZoP‰²cÉÜò„º€˜:ÁÐàžk‡ž™·½¬¬üËÏ}ñµ7víܾ•Þ×Dz%Oºhœe³ND’) “ ÷ âþi›Q¸f—3A#Å,iÆ/Í{‚f‘äš27Í]«Q‰M ?zõÇSüÄDJ’…‹²Øj‡Åèg/pö̉؅‹NZë)42ÜßßŸššºØ6ïD+ïXÚꮺRsñöO;YqÏÎÁÈ›o¼þû_ý£iøøËRyÉnÌÐp-‚z8GŸÚñä3¥æâ³í—9ûÖÏvTnž»î‘Õ«Ãx ƒÁ๊Ók7lšb[¢ ¨Õª!‰¸è$ä‰Y¦oaz¯ä…fSz¤ŽQ·«›ÚdÇÑ…£DÔ¼o}¼÷™yÛ7lÜj6Ï´fÚ©OÉ”T œ[ô½é¢Q£§ò#‚ ÐØQAPª1ZUcÒÜru'´OÄï÷5NX%-™` tD<Å«s–”š‹Tœ:ö³×Þˆ‘O- I.*W¬ T³q|ÿƒ1jbÙʧô¶ôùRSSKÌEgÛ¯Cƒœíme¶tIÙ©Šó÷<¦ùFËô| ÈSy)u&"¬‡Óëñ>¸oÃÆ­ÅæÜó\kµ×»ZÖÌ‘ÊÊÊÃG)žûMåÔ£lg¥Êq‰ó4˜œizUÆXA©^b[àtE¬ä—–/žº~¢ßç°Ø6_c{L)r¼cª/^šn¯Y*/MzWõFËÍššJJÌËÈâÜQÌS¾„€šš)M!.ÚØÛÄÙí;yb6Ž<¥*]}ùù¦ïv¹ADT!Ç(eÎwÔ^ëiV(R22Hå—–­œÐÇ;EÈ è´´¶LåG< AÄzÝ[dÉùý…Omž»ŽÅ~ç;ûÚ»ø×Yúì’açÎ'“©“ÓÒÒT9.qÎPdÉINGg]õ5ÅYýýý##ÃÙz»^ä½Ë ²xÞ‡W,ï˜@[ëéór`yô<FÇìgVÐ||tä äð­³^:~é’p%|®Öìv9#EŠV› ફ‘ó}MQž¸áZK×®>7€Â‚ˆW4î[·@D¡Ô“@/j‹ÍSrèH¡à]5¥¡ OMœXÓáuŸi¿°röR65äë Ó´!îñ(éôÔ Ä¤¤(Ø’º‚ ˆÏ›^Kl 5*€ÓÑùʼ»l뉳sûÖdª¹4–[ç–¡|íbÛo½ùzŒ~ßž•ÅÁ  H©©©Ëg/8Ô|Žs_]t4¬œ½tÃÆ­ïp`<7Ю·ßþËoýõtYÓªÔà^’ž1Ÿô‹èØÉŠí;žb¾uÎÁ•÷-áÅ8îì–m;"úe^§P¤´úÚ:¼\7¹§.OÌò~¬©3y^6›±‹%ò«í!À ¢ù¡.˜Q»rv s¦˜>Ž«Ï=0tn „‚œ?-Qá|Gm~Æ\«ÎÒrãzÆ M›ø$4âo`S:/r¹q"¹IIQñ_ؘ™fà&1{‚ˆ?rM™yÙ,A@MMåÁýbQ%Eó’)‰£ê¢üs`dÌV­Åé謬¹£&Ö¯[Ýôz½©©©¥æâã-Uœl™Rd©¹xÛ–M¯½±ëžÇ¸Ü·n¹ºgXfN‡…Z­3/ù`Ö8“¯»(IÒÙ3'6lÜÊß·>V«¸° ÌëôBeõšµë#PU­æ<ò2²¦(OÌ6ØÞ7<’€Åj‹ôÄ––V2"Šctò8,bhµÚ»’ˆõ:ý˜“ˆm?²ÿýìe-y|pßéŠsñ%ʰ˜g<ù;O%ÕX¾’)–Ï^ŒÑäâX`ÏÊŒºÙ0 h4šE¶Âó¼%ÿζ_.5/_¹jׯ÷Œ§&±{÷{¿ÿÕ?Jú×…(œÏF™eÓµ)Iñ¾ÿÁ ·Êâ[?ÛQ¹y7…qŒƒÁš‹U+^5ÑnjªR©ì•<üczX«)Ê756äåfÌÜ®Ÿ5TVq .²9 "Ê&н֥‰ä-e‚2²ÐÙÕqàð±èÚE‘ 0Û³2ÓÒ´9Ù9ÖY™yù…é¢1]4ŽyKW›·½ÍÛÕÜÓ·£ãx«5KlesrrNŸ<ºný¦høMTÉ4‹¦„BÁ Á)öçÈȰB‘Â?‹ÇÙß­·›Lé“vŒNýö£>!ãá’…B¡P¤à©d ¦$S §>õu4gíFü.rM™vì;ý¡NGçÞ=ï]¹Z/WÅùñ>@Ï?û%“)#Žlú)˜º¨,á¢zQ›­·ûý¾c'+bÔDyùâˆúD©ü¬?)ã>éÒ€¤ÑhJ,28F}R Õ×–­·¯ytÅxK’¦æCƒÁ´4ìós‚ý99Xå¥î@7Ï;²°’ôSS'ïõx+N[ñÈþ¾õ¦Ûs¤²²òY6k—c\-Ñ'O¯Y»a¢Ö”ÁàlG%çÙ-ybgWg^~¡QÔu€ŸÛ±Wò¤‹Æð£pO›3Nm²jÈÜM¼»IQÜȺ‡i¢O$Õ¿””d«%I‹†¸+&b–Íš‘nœ3gvQIiYY¹Uk±j-KleCÒM_{SÏzWKÞÎÙö+%梲²òSÇWÿ¦bÝc[¦j:Ç`~&è,R)SL&SúS‘ÀÀÝ1êêsgëí…y“ÿ™úíG8¼¤„úæ*0ª%Â悉È$ÑH¾Zr3õ÷08€,ƒÙ®Ÿe7fÞ™+ãttž­8uö|åÔÌXðÔÎí •Çs¯Nbf²-ÿ’)–Ï^àÈ¡cTG+ÝhØþÄïLþIW©Â÷gºh,²äð7Å϶Wgϳ¯[¿q<ÇèF|ðþüÑŸÄ×›ó~ý9¹)çÊKL„çæÍö)þÎÁ#­xdÍÛBÎŽQVÂkåì¥ë×®O€×端»¼b媉Xq)))½’‡ÿƒPlyÑ'nimY1Z“ž 7]4f¤#ýع]ŽÙ³ãî3DV ™»‰z4̉B—ÃÙåpÖ5\c¦Ï9s ò–>´uybææ¶3y:©Û<Ùzûœ9³# wm½qcaY9‚ˆŠD] Üh¹yàð±ïþý?¼üò×^ýá+M •¸ÄVö‡ ŸÝV°:Ë`ŽŸK­wµ0£í‘íÛ能ïÒðÅ!œwG1*7>77Ÿ:Ÿ]×(À=â€AÔhll ! þ4÷tV9jøý¾—_þÚwÿþÞÝóA<{E/,}ö…¯$ë˜É‹mó>¸/Fj ¢(.[ùhì®dd€Uk‘Åü®v\ð̳Ïw@(Úýî®$·𭼄èåšøpßûUÉä‰O Ôºë,[º$ܪ³µ­é~6’B¡PCÒEG÷H)€½»ß™úO177“Wâ†+p @NvN¤'¶Þ¼ ‚ ¢9Fž^÷TÅùïþý?|ë[ß<|pŸßï+0å~iÞÛ V³0¨xàXk€gŸQÅwv¿ÿÑ¡hàâfÐ5¼Ej¨0=ñy³²”¤×Îàr:hBζ_q\:~íêGâüRȶÿÙ7þ2ß¾ ²”L”ês€#GOĨ‰U+—ét±Ýýe¦T‰E†½ÞzW +/þ@ΜñŽ9rìD¿@Øìå\y‰9Ákj¢#¦YYsÅÕíLü}ëL:cûާD1\!Öý~0‘Q¨r\â\BJ/j L¹Ñ’'fnî1…k>°H‘¼‚ˆD·§V2” ˆ;¹G*}OO &Ê  NGÉ^寽±kׯ÷¬ytÅöO±üú3íø‹Áž¯›ÉÃ/]Rvªâü/õN—£{ýÆÇ'xºÍjéüLÐY44r8'³M}W0›ÍÑÀÿجx gÎädF'wûÑE„;%Wâá’¥"Å6ËîD¥ÀåŠÂšjê€>jÓä=L#~'ÁÐàæã¿[úôŽ'Ÿih¸6Åê±Ãbžñå¿·ïù©|˜aÀ¿d €E¶BJ¬©‰¡xÂC+™Ä¨éu:V À`pðVO¸l•RiµZKÍÅgÛ/ó—´ºêjX9{éÎ;þõû?¸ç}}#‡”.X$ãüŒ¨?#B§M3¦9W^b%飸¥ZUy~ÓãÛ—Ï^üNý!YÖhó‹ “Š^}©öêÕ+f‹5ÌüPçnæ<¯˜<ñÙ3'¢%OìttZm™f­Áà¤ìIJÚ2#=ñFk[~Ȫ!s7þ™aÊP ê»þH£É†$Iûú7¾qøà>+g/}¡t{<„޲ä¬íOìdÿùÑñ“'ަñŠ‹7Ýà€;K^pÃÕçPXG£@‚™*/Ù™®5Ñ(Ó³ÖðTÑcwýSf{PÆKr¼G[OøÓ¯ÿyºÑ‡f1ÏøÚ×þD›–„ë=mjªR©”¥d €K!€÷ÞÛ«ß/šÇaÔ†B¡þþ~ŒÊp梣a`H*++óìì?pIŠ à_y‰åš¸¢¦êp8™5ÎÕVçúaÕçÏïÿ2 jÝuœw¥šÉ¿ÿÁhýfgWFßÜ`ñÎa‚¾Çýtº( ƒ ¢9F“I’^{c×w¾ó·NG§Uky±äIÙUG;¼n–éS^6ŸýåÀá*Μ¤Á’ÐÈðÈÈ0FKÐð¤ÍÛ ¨¤”F5"€6O'ÿ¦™˜Te$ÓçqS Ùzû]ÿ¬Í~X^S¡ÆñɵžfNÿ{¿w žIìÀâød -²ä¤‹Æ¦Æ†É%ŽL„M›7ó¹—¾¾>%æ"A©æÜÁÐàUw=€m[6wÌížž¶ÖI9•J%¸ëðXÒ̈ꖪÅba¾uÉ“‰¨1¸Pyob¥"E£œm¿ÌùÊÙ myâú«µ,Ú°aãÖ0J‘{öîMRûAàêóðlÔš:@gWÔâõÌ–™^¯@©¹˜ÿ{¸ÚqÀÎ; +NŸøüßuzB‘Òêkã.ºÄ¶ÀéŠsQüY·Ë `f×mBÏ€€Ùq£ "c4É‘$é¿~ü3¶àÙ¸ÙzóëñW›ç®>’ECŠqÕ]¿ÄV¶ü¡òw÷|VÜðý}Š‚°ä Ëh¤d[‹ƒiiiœwG?5¼íV­¥° /vitDüÃòèee2a-×›iˆiÎ^ýñßýÝwKÍÅM·[›{d BéðºÏ´_X9{éËòòß~û;Qô;L‚%‹>õÅg“xÐ•Š…‹^t4ðo}ùìŬ¶Ì×ùzœw”2U™•:ÑÒ(¬¶8ÿ}¾«®ÆRsñöO;YqÏg#oïzëw_úý¤Zʪպ\{›¥X56Fí©±g}:»¼^¯Ùl.±r®ËÔ–ØÊ¶mÙôÚ»Æ;ÌçóR_û`Ñgþ;mjªB‘â ¸øOx¶qpÿèþ,[Xµž÷â•òó#vˆ{½>²^"*PÄèt¡²æÊ¾ÿ/;nôª«ÀúÇî®Gÿλ»¯^©¡a’‹P( &3ºô¡å4 ÓF év ÿ¦g¦e¸ÙJ~ybºÓåp¾ùú/lš»VÞ„úóµÎ€ËjË|éËÏÉu ‚ lÛ²9¹½¢tz=€«îzYÂEe©úÈæóå +/®Óéç[Hí“Æd+3Èòè»û¸zåXŠ£Œ F£‘ý‹ †B¡tÑȱ65G>:zç²ójouQ&OìttÖ5\‹úûý>ð-½à“C’N§ßùŸÇ徂 ¢EŒN#*k®¼ñËŸ=÷ÂKkæ<ÜÝwÛAPÏð:.«ÎR\Xp×—ì—oüêecº=û)þHÁ «Ö"(ÕœWGÍ=CR^~aºÑ@"Ó&ÛßÔ#GIzýlí]TÖsªKS«Åœü÷©P¨”Ÿí( …¬Ö™Ét§*Η/]ZVV¾1wåû׎Ëx%{®y±äɬ©«¯?Uqžsëz½îÅ^HzƒD¥T¦¦¦bÔ!™¯ûÿ»ðzyF—:×'Ùzû3Ï>_YóW÷<`xxx÷»oïxò餹eµZ îåF£b”QÁtGÕ¯×k2™ÛpÎðcj ¥æâ5®8pøØx‡µutº]N&Ý«MMU*•½’‡2âbÛo½“`󯯆²²rƒ¨å©šêìïÎÖÛ3gY#M¡»+†—HJ;6%%%%EÁþ}dd$æ|IfîÞÛ(¢Ç`Zqàð1‹Å²aãÖ' {­vÿW] ÖlËâÅeŸßâû¯þèÛßþv+yÅ3Á`PKš‘.ÌM_{)w~IQ¤«ß1ËŒHhREB‘Ò+y8ËöãŽÊK]rŒNÍ`²˜_þ³o$ýmŠ‚`2™ÆþÓáLÂióÊüðÿ§°À”[fë¬q|"×eø¤ÀëGwl~öù›oð|Bsçæ<ÿü—§ƒ)ÂB½jÝuüß½DŒ¨wµ,ÏòXm™Ÿ?ãâ¥+Éä•¥òÒLíLŒŠQF…ü¼¼±ô÷§§­Z A†15†0ŽQöïáůHKKÃhq]ždÌV­%vòÄ-×›ËÊÊíúY<ûßÕçÎÖÛíY™‘:FÝ·n=Hï¾d·cõ:{Ü oõܦ!‹:”J?íxí]¬ÀÂÆÜ•²\ [¾rÕçÿ¯Ððð?ýÓ?%Ÿ0|B Wý%M=7¬Y».Òo¹ºià’€Tm*€¦žëü›¶,ˆ^å%¶<#ˆ„F’¤ÿÁ¿X‘õž‰„Ÿ§¹§³Ö]§Óéÿð«ivá¤ám[6õ¿6¼¢JE =Û~™¦}2Á¼T7oï€`0XyîLrܬ,•—0*@Eqü»âÓûúÛx‡vxÝ΀K§Ó——ÍsØÕú}~Q˜BqÓíÎ×ɤ*>:r0F¿ïr¹1Ì ä““é‰===ôÞ#ˆ©CŽÑéÈÿùÁÿõû}¦Ü2› ;L>)À>º÷,8+ƒÿùŸÿAcÄVÓnÌäß4³¨X6= Ä4„åÑ3bÎØ Ñ” ›¹äÄ4 ®áZÅ©c•øDÁzy¯äxK•3àÊË/ܲ)æW’;7çëö§+^5MFY§×¸ÖÓLá¢IFÓíV^üžf6ãà‘£Éq³²T^2k š¢WyI„»6cü>?€S.ÿÝ)¦ú̳χ?ìØÑ#:@•ãg¯´^Ôfëí~¿ïØÉŠ5ÑÖÑ ÀÀ·ôBwà‹Õé‰--­ôÞ#ˆ©CŽÑéH¯Ç;"K…6o;€E ï½érßzg×›4LœaŽQkª "ÁÐ`­»Àü’¢ˆNtß"Åñ„‡åÑ;.YTí†Ù®5Ñ@Äüìµ7œŽN«ÖòP–œÊeÁÐàæãv<ùLqaA¬–ÙzÝ3O=ùÕ?üÚôÑfQ*RÒÒ´ªµ4Û“Íœ V9.xxŲñŽñ÷õµµÞH‚›•¥ò«ÙèìêŒÖ~~W542Üßß`ù윻´ÞÕÒ+y¬¶Ì0ŽuŸ\kde3/:8_!ë“#‡>”$)FM°ˆ]ÎÕáXÚ~YYy¤':]n1eÈ1:M©k¸VSS©Q‰«s–ðo½±§@éü…ãPuñRMÕ&ž …B¡PH£ÙN8gšn·ØþÄΈ΢ä‘$@›¦pÕÕÀ¿iA©Žz6A$’$½ò¯X9{©,…1ÜïÑÖÓþôëõ¬A^±ì/þü/Ê–,Vã«Ó는V_Uq‚‡‘ïn°aãÖ0Ì®·ßN‚;•¥ò’AÐhim‰ÖÞ³ª‰×럞Ç?„…™dׇS¸Ú¸a-€ZwÿpÑRs1€£ÇOÅ®•µ«3yÞ]¯äé—. ’ ALrŒN_~úÓŸ(5óOÓ`†x^~aÕ°·ßÝívQ9®|šMoAf´¹§“mPϲQ1¥i„J©du®„`4iL‰¤áFËÍÝï¾à‰‚ÇdI.£ÆñɵžfNÿ{¿÷•(þlIѼÿñ7³eÛŽiXò‘©‹^ì¢pÑä„•°võ#ããrßJgŠ,•—˜êTsM23ï!c5 ƒAJ\d+äÜ« CÒŠGÖŒç¡K76lÜ 9Š‹Í¹Ü×ë‰Uš‘(Šk×mbk"KW»ÎôÈšq6}r€„¼ctúÒëñ²5ÿ4 ­¾6™³Æõ‚ ¿ö‹×h˜x200ÀnÈ”¥uV{gýÚU?…TuV`ñZO3çˆF^F6€Ê Q N7™ÒiL‰dâÝ=°jËgÏ—÷J6Ÿa²‰›6¬™âO ‚PR4ï[ùÍ^üÊ4t‰Ц¦*•Ê^ÉÓÜÓI“)ÐêkËÖÛ×<ºâÀác÷<¦)Á?j•€³¿›g£‚R.D1bñÁ¢{¯û¥P(”.‹,9õ®ž·y¶ýr©¹xùÊUŸ·ÉEQܾã)YŒ·bË\J¬©©ìrÄ*§PÅm;~£ŽQ£Èõcá Ü“é‰]zéÄ!Ǩl¤ 1uù}R_  ½½½` ³«+(Y‰½;‘$éðÁ}6n]l›w¢µšçí·y»–ØÊîûê?]qnÁ‚…6+¥Wó`(R«UY3Ý1Ÿ¸ÖÓ\`Ê cÄß=‹:(Ú%‹Z’Eäά5¤‹F§£3ŠæuVf& +‘dt9œ¯þð•¯þÑË›æ®}õÒ[²w3:¼î3íVÎ^úòŸ¼ü·ßþNDûg¹ssЋЦOÅù0¤Šöâåìg!øs¶½:{ž}ÝúãÙT#ÙýîÛ;ž|:AoPŒÙqƒåVGQ„Çb“èõzM&ÓbÛÎl›|é’2N/‹BñbÛ|ï½·;vM”Ì+ÐéôƒÁÁNgI3ó¼Aä`±1éñx@ÄÔ ÇhÒ¶ïÚ„t»œ·\ÝMM--­N—; 9zbÃÆ­%æ"ÎŽÑî@/€¼‚û§‡¼õÖ®ò/åæï‹N¯Pí¸B]‘ôtxÝL½½¼l~eͽG¼²êb;F™ÀhàÏFYnuËõæhý Á óÿJÒÈȰUká²0žMÎ ¥òW(.²ä°ýì˜Ì|ú™gÙ¿°ˆQkêLž÷èxäåG,ž@‘"1uHctza¶X,*ݲmÇËöï}ï^þÚ—u¶·iTb®‰k¬ËÜ·Úîߨûöí½ï½McLJ@_€<Ó\¹ŒxgÀÅŒø‰š$7ž˜ˆ‚ ÂÀÔt»C– `¢]ÕÕ5QüÍ–™4²DRòÓŸþÜï÷˜r‹,9ò^ÉžkGXU0Ÿ‰Ü¹9Ö®þÖ_~ó/¿õ×k7l"¯èç_¼²Ô»#øÃ¶ߺm¼BÃÃgNKлS«U´àË­v¹¢æ£Ìœ®äihd¸¯/ Ä’6yyÙ|«-S…âŶÞz3†Â¸‹–ÚFW¦C¡Jä|›Î€ À9s"=‘JÄ!Çè´ÆžýÀÚ ›ÒtŒÖ!á «¿4‘Wÿ¾‡ý~‚CC##Ãé¢Ñ¬5ÈrÕŽËžyöù Orã ¹«r\’%3W©rwÆ IDAT/j­Z‹ßï«k¸ÅŸ%ÿ ‘¬ôz¼ÿþƒ°fÎÃzQÎÈhŸ8pý(€ßûêϲ}öÄÙ³2^±ì¥_øçþ—¯þá×ȇ/^‚?õ®–!)/¿0Œ±}ôøÉD¼5•R©P¤ Iœk$°Üê(èÝW„§¯¯@©¹˜ÿ»—Ùäw:ÖÙ¿óÏõÉ2˜­Z‹ÓÑ9^ìsTxäÑGïüÏÁÁ!Ö4Ï;ít0G^Ìó–«ALrŒ%ŒÖ!á‰4 Õhî{äàààÏ~ò#)> HM4–ňËüšÈñ$7žˆŒE-]t4Èry&;€³gNDñ7õz’t ’™º†k§ŽiTâÆÜ‡å½’æžÎZwN§ÿïþû‹B¡Ø¾}û–m;Æ«aBP)•ò¾x Y¨r\°qýºñô÷×^¾˜p÷%Kå%Ùz;€Î®¨EçÙïWna(êïï°Ø6¿M~§cýœ9yù…C…âå³øèÈÁެ}ö²ò;ÿ {ý%Ï€€Ù±7¶±©‰^w1È1J|$Èy+²»Ï `Μ 9d«/Õ65’)σþ@?FemDO0h”äÆÙ£–b‘GŸn0ÐÈÉÍÏ^{Ãï÷eëíeÉì<ÞRå ¸òò Ÿ|b €‘‘‘Ÿÿ÷ÓMäÅÛØÛDá¢ÓЋަ>‘n÷#uèð‘„»/Y*/±…’ÓÑQñ·ðL$¶Ýïó(1 J5ç~¾Ó±¾s玱¿pîöl½Ýï÷;Y»VV¯~䮿 0zž7ÛæëPTñG¶³«‹^w1È1J€$ØÿöÞ<°©ëLÿlÉ÷J²ËH–¼a/€Œ!„-aIÐ,4K›­M;i§Í4餴ùMgÒN;v~Ó™´™iCš4MB’I€°†¥ˆ ÆŽñ6^°‘°¬Å²¶+}ÿ8Áu;–­»È~?%Fº÷蜣£sŸó¾ïc”´@^P!»’×_FJúƒVè]®|ɸ‚F©ÜxÒ!{¸¨Hyô6%ÆýV!ø‹_üÀ¼¹r•[a„„ð¶æ½ÖÜ}ù´R}þþ?þá÷4FC¡V©´Z-€CíŸPoL(BB¸±· À·­ê5獫Ø.“óR€Îó «žŸ;"ƒ‡P$ …4j¾Ü*µÛª-¸qiù´ÒÊÊ9²lÞæç]`׎÷¨G_¾34诟»ðòngOÇ&IM8¯@•ýZ‰û9$„kœµ~øÿý€SÎ:‰7o^Wa)°{ï~ñî²ä¦¯üãg©ôœ¤§€l‰Öë #yŒÃyAŒF üLllÚ´™KdϦovu¶zÛôzÃÒ›|î‹É)‰Ðiµ*•ª7è>Ü!›œ]lž`×î}‰½lIq1/1xoÛ®¦Æz›Î:?ïZy[RÝušýR<þío²¿¼ùöFŸÆè2T)©  ¨xƒþW3€aöT-­mIôÝ‘Ëy)+Ýàܹ„m;s²í#Ý™‚ dð¦2k¡Ä½=xÝ8Þõ©ÄwgQ;·oéu{DºÇq -¾òï¡H@o’ø#3wâœì¸ý“.î›  £Ä_Ш4RÞŽ% ädçŽü-g[Û.tS ÑØ~ɘ,y¨ý8€zt˜ªXŒæ³´Hš‡óŒ .EËB‘9'ƒ7uwužïêNì•'Y)•ž˜ƒÁÖ¾`¶½Rb»Þ+Ù|zO ¬¬œ³rùRÑhô7¿ù5Ñeè ú””ÔVo…‹NXŽwÕ¸sÍ=C½ †Ø›Ö'ÍvB¥‚ÎK&Þ §7aÕíóòâp¾õx<Ê­S%þÔÞ ŸIuÒ‡œsª´Ùö™á0{0sçT õO‚ øiÈÑçĈË, æÜ¹VZëbÔ0J@0`ÓY%þ¡`³Ç·î¿·e —° âªìr¹Ðáq²ä¯}í«Ã¿²­ÊŒ&£=œ7»d2öD±yÓ; Þ»sÜHüb|p¾«{Ûû›¬)Y)oB}HolÜà‡ͶÛô¸z7¾ý&Ѫ”Ôôt.7““…WS½½¡1i\­5 .éGR”x°š_pMk`,-0äK"ÅVãçk%¾ï,û4š¯®>šðÃìÁû·¥Ënê_™0*µ1}Р°° Þ7º\.ZëbÔ0J$'kë(QN|>€’Œbz÷¶c¡@Ì[cÈãPˆ’G”Ïqéééö¶|$W ¼®Ô\àȱêÄ^ÙfµÐŠýdf +ŠÊÛ’óXW5€ï=õ+ÊvøÏÇèGa­VËN¤:7€ÊÊ9ñ¾±×ãA£…„Q"ù¨þä$u‚ôõõ¨²_'ï>ž% <î^*3ªpLFcZšº7èþ¸KN ›…|x0ñ›ûœœeb¢„Þ^7€•S–Iÿ”~›v"Á7.e™ÂáHäå—_¢1ð»«s´PoÇ»NX±jåP/ð÷÷ýè€Â?…*%•Õ•øœÕÈ8ŽD]p¹ÒAèïïÇ¥ƒÞñÍüÜ9Ö¿ñºˆÛ²éÃ×Aº”J/iÑî º|®ËÂex½>:$ˆQCÂ(‘|8œ)KNüýý±XÔ¦³Êk¯±½ùCö¸;LŒCó™Ú (N­Öëõ¶ÙÂr5ƒ…45Ö‹z0uÚthbbþLš_Q´HÞ–xƒ~–aðµÇþ–mkïØ·g× £ÑàPÇQš«€ZÇV¡ˆ}G®Ê®½Rø§P§©qɹ[JòM9êV‰Õl6â],ja¶}¦¼õÅ&×haá¢G«EŒ†Y¼xñð/Å„€;ä›w6== Ĩ!a”HJþˆ:Aúúü£˜Ñe»;þ àïžøî0g§§?­¥ñR ª”Ô s&€c]ÕòV¸c¡ïoy7áW&ç%b"Óëêe~ •ö©ò¶¤ÎÑRã¬Õë ßxìoØ_¶ïü`"?%òGá¢Ä`BBø”³À-Ëõ·Û­ðolÎKÚ,.Wo¢.8yrÁ(Þ …d/u%Åž-¯ "Xe&?7g$æW±X€ÄYmîN“'çÅûÆöövZèbt0J$%§“Ç:3©açÒ²3Lu×éW³^oxò‰ï õšSµu4^ Ä”aJKSwû‡Ú嬀!jèA~åÑ!uõôXV°È¢3ÊÛ˜½-Çzƒîâ’iw¯¾ @,ûÃ+œ°CÃÂEO9¨7ñŽw} `ùŠÛ‡9iÞð¦¢-˜dq^âTi5ïóy{Ý ËßË’þÊÍ9;î—XtÆC¾ÏçM¸Uæ`n¹yÙH^G¥}ò„¼ ã}cÓÄh!a”HJ¼^% HÀ@1£*»Ì™ÂÛ› ~ܽ’†¦f/¥¡ÓjµZ-€mÍr&ÑCäЃ¢k®¡±&&2ýÁ{P_Y´DÞ–„„ð¦†ÖÜ}?«¾Òç÷ÿñ¿Ÿ€ƒ’’’Âq\ ”·²3¡¸ýsÐ_ã¬0oîì¡^ãtö(¹<‘,ÎKÖt€ÆÄYÒ[-£7:÷÷÷ ‚Á›d7¾‰ªìr›7¾•p«Ì ýÔ²Š‘¼’ù/å²¥ì6½mÙqow÷Zåbt0JÏqºýŽ$j3‘KƒÇã0ÃR&o1£Á»Ì[ãò„B?ÜGã¥8µ:#Ã`wë‡2:ÑÈ5ZD =(:†›˜àx=^Al:ëâ‚*y[âô{v·~àïžø.Ïóêꪙh#’’’àX× y¥rü|-€;×Üþ WCìu¯+³ñr9/1]¬åLÂÎàmYYcy»Ïë0+»büÍO¯«°”øèÈ1ñî²ä¦GøÊH8À¤ÑKüC ¸$îíe[G'-q1:H%þB@$Qk?­?MC&A`ÅŒfÙeVw¼5.£¶Ž²éôè’aÎLII­qÖVwÉüUý,\TœÐŽãF Gã!í¹xÀl{¥¼~}ª»N·zÛôzÃãßþ&ûË›ooœh}L¥pQ⪻)ö™;»r¨×4ŸQhV–\ÎKL;ך0óF³9c,oïïïÅb†|Ù ˜$–£¶sû–V-¸ ƒA¿`Ñâ¾8 0òR÷3 WÆ'mÈ/¸£›V9‚$ŒÀ¥Bæ¬Òs²@gb’Á‚F•à€YÝušyk|ï©§®Œth>ÓB»…aÎ`¥E÷¶“·%á¢{þtPŒëSQ‚`„"ŸÏ`å”%²ÿXl>½‡¹o¯\¾@4ýÍo~=6÷©©jœµ.J\•Ï׸sõ]C½ ‹m|[‰•Får^bº˜3qÎK%ÅÅcy»‹²o–u>nàTi3,eÞ}o›xw™ym‘¶,b”YoI‰;è—·0zÑAÙô1ª½uK…ÌY¥gÉ`‡œMc¨×sº®†ÆN0e°·åX·ßa³çüðéï_©~Rý1—옌FFˆe/- ‘ÃE”—•шÄgrO8ÉàM+ŠÊÛ’ÞØ¸ À=Ê"nz\½ÊzÄ€…‹jÿ„æ$qUš]½A·ÍžsÕÚDŒ£Ç”¸¡byô;/(0ä8Û’°ˆÑIÖ± m¡P ðGM,³ìÓ4j¾ºú¨xá¢Ç-]vËÈ_/Ä¢4j^â¿ }NkÜMdPL£„Q©9¯æx}£WcÛÛÛiì¤A9A£!!¼¡n+3bºï‹«/û×þ|”K^tZ­^¯°±q›¼¥E™sD 0uÚtt‚ §çb,-5Éî Òáqëª0apøÏÇ&‚mã@¸¨7è§ I šޣn\2¤ašýè€Òš­V§p%­ŒÁ"9º»–©ÆqœÅjãE¢Ñh,Pn)7Ór†u€wÞÙ(Þ-®Q¦K¯`(Ó ™—d´yÏ(›wÙÎóçi}#ˆÑlŸ¨ N­V©THPv#^šÏ’1½D(*h”1"Áå+nøûÿ“×뛀&Êç8³Ù `ë™:‘¹WÙ.]ï[A¥›$eox‚~9Ù¹q¿ÑãAñCÂ(Žã4öJxÏëN>þ‚ÃIÃ'îÞ^ óæ*!gÇé÷¬ÿtóUµÑƒ‡>¢Á’g%Q«'MÊP㬭s´ÈÞžJûÔ ÞÔÝÕy´ú¤H·(˜œOãN—áó÷š_Q´HöÆlj؈ܸ”¥ ‡#‘—_~i.,äßfϹ²nØð8œAÄ(vPÔ„.=@SOkÒµÜëõÑðIF(éïï0?ï:%´Çé÷ì9÷!€å+n\$«­£s"$K* N­¶X-̆~G³üÚ4§J[{=€—_ú½xw¹á†y4ôq%½®ÞX,Z`ȯ´O•yŸô³_Н=ö·&#€¶öŽ}{vËnOII¹T]ô8MBâsù¸«À‚—²¯ÆUÙð¦‚*ó¦©Ó\ðKí-“oÊpî\ÂêwešÍ‰ºT,Å%I1©É5ZÄ>̰xñâQ¼+°¦[$î“Vo€œøý—è9ˆ Fšº`¢Ï•*-Mˆ›]R›¼³}F}Ø"UO×ÕL-« q”Ç£Õj+,å§JH”®s´¬šróÿÏýê—{©}ûö=ôÈ54^’¡JIeªh«·M ª(€ùyײúýµõ "ÝÂ`ÐçÐ4#ˆ« Ä¢®žÞÌI™ r¯oóœ—7z±ÎÑ’o¬­°”?ùÄwžýÉOlßùAQQñøûþrÇž¥eù6ð:%Ä')Ÿ¯‘~Â5ÎÚ Kù·­|u݆«¾Æá¼xÑqaìNA‰™á<ɘ8#€ž^w¢.˜———¨K±lú Þ”k´(ag>†m[€Í›ÞñÁ37gtËþg£œQâ>qô9 ùù¹9ñÖ8w®•6¨/$ŒNtŒF#äÈ£ø ÆTûÏï'o鈂ÏçÓëõóóªÞªÛ¡„& ÖF×þîùý8U÷©ÓÑMÅ¥A•’:ÉbIIIíö;6ŸÞ£„&YtÆÙöJ/½ôñî2µ¤˜FŸ †¢?èïï×jµ+‹–¼V³YÞÆìm9–oÈ+.™v÷êÛÞÞô^,ûÃ+ü§~vœõyº.@­ã´,wŸŸwsî&F‡ôÂ(€CíŸTXÊç/\¼áÿ6 UŒ{ãÆw¾þØ7ñÔúYĨԙ¼ Àù®î„íÒ‹ÅRRR”³3ݶYe9V-Þ]n¹yÙèÞ„i %ÌdÌEZ—ËE+*AÄýC]0Á †g#éïž}FGgg% ¤„ø¼>­V[`È/³*¡Ž$i£}óñÂÂõ°mëÖ‡ù*—è?!*Uf椴4u·ß±¡nkH+¡UK çØøöú^·ˆqj”GOŸóP×ëæ8Φ³Þ[q¸£FÆ–0˾¯TÜ»æîû?>qòl˹>¿ÿøý#_ýú¸émV›ªJí ºeùi6ðº K9€Ÿÿì'þ@€&\<ýô ùQúØjoÐßàj.5-½iÁ¶W?Úlj>ëïóÅkä-²8/å-ª«&ìËbHpOF£Q•JU`È7ð:V˜2é¨Ê.°yã["Ye²n‹GÒÒÔ‡å²3€Â)Eñ¾±¥¥AÄûTK]0‘Ñô,ûUúßQ¶Ïhj«Ã#«zIH†‹º{Ý™“2—N^ÔÔÓ¡!l@]¾âv¯®Û@A£0PWTQªh¥}j!¿»«ó½m"–¤7€Êʸ ÈözÈ| â†Ì—&.j•J¯×C¦"ýlŸq¦¹qŒ×éî¾@C)1ýÁ@(Ò¨ù%…³•Óª:GËÆ†­>õ<Ï¿óÎÛ4Xâ¡LUÔÀë<—Ä‹;0ïú94âs †B>ŸÀÊ)K8Uš¼©î:ÝêmÓë û³¼àW^[çï.Ž<DZzñ²„‹rª´–2ï¾·æü(ؽw?€ K¹,ß‘³ÛïÐë ƒ},/ãÄÉÙ{I.ç%æEžÀ¼œìì„72‰È8…ÆÈÀ±ŠxY>ƒ~Á¢Åcïa#g²gBB¸7è0Œ=ÚU!wb‚$ŒN\L&€g­,AYé™ Pÿ¤…¯©°”³È_…Ðìê\ÿéf¦þðéï·wœ?]WCƒ%ÒCø€Û’rTQK æjÔüÁý{ÄŽZº®rM‚ n'Ždð&%œ¥m>½' VVιqÁ ¢Ñè?ÿü8èdV/þX× Yî>Ë>™Ý‰Z½dÓëöÜ¿‡õ¤, 8Þõ €û¿üàP/¢Ñ­[6ÉÛKr9/1/ò¶Ž„U€ÍÍÉIx#cÑsN—k ~X%9V™yíX3BÁ.ùKúò0›3â}#=D¼0:AÑòFˆ÷¶“¥ù†<ÍgǺ›¤d9`.LPFÐ`œ~ÓF‹K¦ýðéï\ý1 VÂÑiµ‹%%%µÆYûVÝ娢EæœRs‘Ïç}ùÕuâÞhJ!Ui ˆ8~©]=±X´ÂR^dΑ·%!!¼íÌn}óñl» €³§gûûï&u÷òÇq\ ü¸«^–̰NðÎ;iªší»>0Û>S–»×9Zzƒn›=çšÂÉC½æèñjy»H.ç%›6 @çù„9/Y¬Yb´“mËåšB£F‚cŽã–.»eŒ‰Æ¢4*ÄýÓæî0­4n·ÏöövZW ".Hˆ¨U*sf€ƒ–EÔ0ðº ÞäóyÇîðHÉr14?ïZE5Ìé÷¬=±¾Ûï(.™öÍ¿}¼±þ VÉ0™Ìf3€c]ÕŠ*eeàu+§,ð›çþSÔ$zsªªh&ÄÈ E"·ÀÊ)Ëd?Kkvuëªð½§žâyÀÞýÚZÏ&o÷¦§§8ÖuB–]™µ0ƒ755ÖŸm9GS}Ôœm9×ÔX¯QóeÖBYpÊQà®»Ö õÿÑÈØE²8/xFÍû|Þî+D*P …ÂሌSht0%WÔc•¹sªÆn …ØtV‰ûÇò(,ˆ{L{Șž ℄щHf椔”ÔWsu×iYoÌðÉÇGi,’š^W€ÙöJE%Ô á u[\Íz½añÒå\Z ÖØQ¥¤NÊÌdOà[Ï|°¯õ¸¢š·¢h‘4Iôƒ¾rö\š>+N}çÔ¥²7f_ëñn¿ÃfϹÙ_^xñ÷IZlT­RiµZµÎfY0?w€÷·¼K“|Œ°>¬²_'ËÝ?îªgU&†©f¸çOÊÕ9œZ €Õ[”#¯Ðؘ°Xìü\£æ}>ïÀW2)(³²pQQUn˜7?!×€Eg”²‹ÜA[vÜÓ†L8"^HpdšÍiiêÞ {{³l¿ùÆlµuu4IM(QfB=€~·aïö#¬Vë¤ÌLU -wcz&±fYYýÿýt“,þÃÀœè%H¢G"*UÄĤçbO,-0äWÚ§ÊÞ˜mÍ{YAjf8‡_ýÕdìUV]´ÆYë ú¥¿{‘9'ƒ7uwu­>I3|Œ­>éóym:«,‡Í!!|ÊYàŽÛVùv¹äŠ­V§±LÐè¦Í›eiÇ1ç%©·YéÎÄiL£pщ‹¾>?€ùyIPðGšc••«V%êR¡P€U7IâŽêö;°¢ØqµÖéèA#†„Ñ SEl;³Ûé—ͳ¨Èœ£QóMõä^:>è鹋EKÍEʬjĬê»ýŽ´4µ5+K¯K§!9,}Þl63«¥ u[e JîaI•¶ºôVß^/A…»†Ä¤?5¿ºôÙSçhaWž|â;ì/Ûw~\O’¬¶‰\ᢹF Õ?YwšævBøèÈ1–rYN¼A³À¼¹³‡zMGÇyYŠN¤¥¥hóž—ø¾&Þ =qÎK%ÅÅ¢6Øçõ(0äË~øô¹Hp¬’Ÿ›“À=[8Æ%­\JÜA€¼ì¸?ÈEeÓD0:QPE·žù ÙÕ)cKŠ3 ìÙý Êø "½½nK'/’¸òÎqú=ê¶2· S†Éj±¨U*¸Ï…ç¸ôù­g>ØÑü‘r èXQ´ù~¼½é= n—ÀЂ˜˜wÀ IDATôºzA°é¬7äÊ_•b{óÞ »¸dÚÝ«o‹Åþç~›,=©JIMO×8åh”¥,°qóÆ·$ÕŸ(ß·gçö-Ê-E²4€Í¥;×ÜÃ|É®$†Ø›ÖKß01ê蓺Æ(3Û»Uì"9/ Ä¢ýýýæç]§ä©.ͱÊ-7/Kdß ^ÍIÜW,PÚb[mlj¢E• F £‚Áª¨ìÅ)~üáïïïïïרù•EŠ+6Ê á}­ÇYZ=ÇqYYV þy;Ãd²Xþ’>¯´¢¢ŒJûÔRs‘Ïçý¯ç~-Áíz@!u¹\æÍ•ý,-$„75ì°æîû¯)œ  ÏïýÕ?$EOê ú””ÔVo›,åM ¼®ÂR`ÏŸÒ¬N ü—¬º¥§Ããlõ¶éõ†kˆ,|ºQjµeÀyIâÓY¶@5%Îy‰ã¸±Û£.‡=m)sCÎàXÅj™4µ,‘Ço‘p@!_â¾rø/(›÷gq¹ziE%ˆ‘CÂè8G­ReY³X]Ñ [eW7˜ÿ åÑ?ܽîp8bÓY•Yl”Ñìê\{b}ƒ«9%%•BG‡BËk¬YV–¡y ýÈk5›•–>ÏÈ5ZXiÑß<÷ŸÒ¬'‰ = ˆ K0êëë°ºôVÙÝ~³é{úé²(¹šÚOO×Õ(¿Y¸è¡öã²ÜÅ£íܾ…ÂEËÙ–sMõ5/Wy¢Ï׸ÿËõ‚h4ºñí7%}–‘Éy)+=@÷ù„¥ÙÙ¬RdaG! iÔü,û4eNriŽUæÝ07±bÑX,ÊÚ/ew]ð÷ÈÉÎ÷Ý(•ž  ÑñŒ^—ž•eeôë?Ý,o=£Ü:Àû[Þ¥Ñg±h¯«‡UB‚äP0·úÐQ›Íf2ɰþ³g•Êj±dNÊT©T­Þ¶WjÞ<Ü¡PuÀÀëÖ”¬°îµ—kë$¸c~nNbCb"Óëv3ã¾ùy×ÊÞ˜Ã5,Jîño“ýå•×ÖÉRHqäè´Ú””Ôn¿C–pQN•ÆtwßÛF“9á°Mr•]žTèfWgoÐm³çÌ©ò»ùñ‰“’Î7™œ—Œœ@KkK¢.XXX MËYÐè «B…Q ŽU ý‚E‹~Ùp8À(­0Ê¢löœ¡ \ …Ãy‘–S‚9$ŒOx޳Z,¦ SJJjƒ«ùÕšM2º- Ö2¨Nÿ8&‰0Çá…ys‹Ì9Jn* e&z½ÞšeÕòš‰éóym:k®Ñ"Kupã’%Cî÷B¡£¬=r9/å›rÔ7$¬t€Ùl–¦åÁPH„ Þ¤@[TN•ÆŠª‰z¬2ïú9b\–ù/å²%î´Vo€œøý—ÚZÏÒŠJ#„„Ññ“D- Çq½A÷Ɔ­ï6ìUˆe ;!i¾r9/qª4š@ýNÊV,•1îx(رÊö]ˆw‹¹sªD2¹ GÂŒ¼Ô‘úzXã¯QÛÑÙ ‚ F £IÏq™fsN¶Ýl6H¢kO¬?ÜQ£(C¤BMœõV `FL¼é¾²UÊ×FÔ9ZÖžX ýÈ‘GY”([4X9Ñÿýt“’sç(³ζWøñŸ=ßÕ-ÍM‹¦R¸(AˆDT”š‹*íSeo̾ÖãÝ~‡ÍžsßW³¿¼ðâï•Vl”ç8¶Ùkêé¥ósçØ¾•ª‹ŠH0ܹ} €*ûtYPël°|Åí¦!5  oJaÁ¤R©¸CRïO¬é&ÕÕ ;~>’£¯Ïù⎇ÚÅIp¬rüù"]Y\ %–’ þ‹ §ÅûÆ––VZN b„0š”¨U*VËôP‹Å¢½Tƒë™(‰bP╨'„„BbÑ‹N§òMê‡;j®”GuZí8[:2Íf–8Ï¢D™$*‹}Ç(öÓ«¦Ü à¹_ýR2UÀ]wÝM_j‚h4 `Aîõ²Ç]ƶæ½HpùŠÛ™óL8~ýõWÕ]¬ºè±®²ìôʬ…¼©»«S×»‰Ì®Ýṵ̂”ÉrÀì úYöeKnê5çE Ž 8žÐæ–:ð-K7 @Ë™æÄ}s Ÿ×ù⎯ ;VÙ¿w¯x·˜Q6Ýbµ‰tñˆ Шy‰¿•¬ŽDIIÜnZ½*M#…„Ñä€S«µ¼Æd4NÊÌÌɶÛl6³ÙÌôÐÞ ûXWõ+5o¾V³¹ÎÑ¢Ì4X.*Æ ¡dD\ 6©¿µh^²4ûJyÔl6Ûm6“ѨV©’zDX© ›ÍÆÖä’DXtÆ¥“Xû»çVKç‡;{ÖLñvØAˆÅb±XL£æW-’½1N¿gϹ|í±¿e±rÍgZöíÙ¥œÝ ý¸«^–°’…ëßxæ­Øœïê®®>ªQóÅ™¹²4àPû'n¹õ Ãxa¿±Nô™ðYQ¿ÔþÚY陎„í‘r²¥vìbÑþþ~\òx"s;Vu·rÕ*qŸB!\ (–òñ$ êõ†a"¸¯Š×«¬Œ‚P2jê%lsSRÿ¢P§¦¤²ÓQÕ .{K <çmoót6¹Ú¼A¿Â? ×±pÑ7ÞXOÃ=qE"N‡ÓbµTXÊìhN—&î¨)³ÎÏ“Á›ôz½^¯ýýýÁ@PˆE“å³hyV§Õhø””T¶t4ö6jÿDùëÆ`,:ãýÓïÔ¨ùÛ·ì?xXºÅ™ã¾pÛô]&±‰F£*•ªÀCnÅáŽySçh)67—š‹ž|â;Ïþä§¶ïü`FŵJ8#Ñ N9ëd9Ï5Zl:«Øº1Àþ½{++çÌÏ#‹Ë–7èoõ¶ò—Þ´`ÛÎ=W}MS³èeFÓÒÔ.ø{%þø¬Žd[GÂ"UKŠ‹¥DŸ×«ÕjK2Š÷ªŽÉ:3+»"«äçæˆ½P³lú,Ý$‰ ºû/òÍæŒxKÒ®«¡zP1H=••s^M¢3óÞ Ûò´¹;=!o›çBr‰óó®cІÙ¯²ì3ˆŠD.^ì±X’Ox<®s´ä-3¬%–rF£Ñh(\!U¥¤r7XÐíwïú¤©§CáÞJW2X}uÝ)o½xÑ‘ê÷qÑh455uaÞÜ&W«ìõŽ·7Ȫ°—L[¹|é¶{b±ØÿüÏoÿ韟•yË®RiµZÇ»>•i;Wàƒ]ÛEº¾Á ¿ç®5Ê™“†×|,)DŸO†Ø«@†Ö”k´È’Þq¨ýxÁôü›oY1”0CìÍÿ]wï—oΧ¤¤"Aé| ù˜è6Éš%ý†"‘P(¤áøYöiòž9å-†|ŸÏ{²î´xw‘À*“ £&^êÍa›»³À?­´8Þ9ÙÞÞ>q„Q)Å9ô´ª\mΘV†PÈát‚¸ì‡º@v˜è9ð¿ÁHèBŸ€'äu}ÁHHùŽ(ÃÿVXÊ}>obÍèåÝg#' ¹\.³Ù\a)oóœ—%êaŒtxœçÞ–cÅ™¹åÖ©†ü…4 …B¡¤Ä“½<Çi4Žã¸A¶Q½A÷)G}­³9¹NSQµZ&-[¾’¾Â! ±X¬¯¯/==}eÑ’ u[å= áM ;¾Rqï=ZßÐt¶å\Ÿßÿú«xðá¯ÊØ*V]´ÆY+ËznàuL×`†éb°ä¦õoÐëÓÓÓÙ‡Cá‹®éÛÀjVÙ+:<{¥¿{‡ÇÙtÛì9s*¯*LøÄÉš{¿$VÒÔiºû/H?Ûtw%²°©\!ç>¯/sRæ «ÌÂè k €Íß ƒâmÛ$X@€^¯·¦[$î@OÈ ÀjµÆûÆ—‹61HåFáÿ?ò{ꇑ°´`û!L¬½ìû bäøûû˜ÍæUSn>HFm”='³R¯+6ççsJÍEƒUÈ€XŒç¸H8"M$©Z¥JS§qÌ¢x  Ûï8å¨oóœOêc•U´©±~Ãÿm’øî·a}y BJ¼/Çñ6u~ÞµûZËÛ§ßs ýȼ¹O?ýÃ'ž|2 ÖÔ~*cN¢*%•…‹²ÊÒÃÊîÚñ¾Hº†Á _°h1} .ÃçõéõúRs‘?"‹ ~¨ãèª)7áö;†F…hôƒ[o¾U”_Lùœ—2tžïHÔóssäšBýÁ€ ¼©ÌZ(×ÜÀëXê˜xÇ*æÝ0W‚Ï‹F˜8£Ä}èúL)*‰÷ÝÝ0 qf„ä-_š¾šúáêOÖÔ„xÜ[ÁÊQ •ƒ“¼û ".Ƈ6úÙ£{Ð_Ýuººë4§:o´gäò2xS €”‹Å@AB¡‘° ,èc,Äê45+@Ìê_¦„è ºÛ¼íM=­mGÒåË_É`Uôç¿øwñB ®ÊìY3©$AH sí³feͶW6ºZe·†;ÜQ“oÊ)0ä?úð¿}ñe¯¼¶îGÿø²TØÐô\Ír…‹2]c÷Þýb‰×Ï¡¯ÀU¿ýýýZ­v~Þu²Ô#ªs´ÌÏu—L»¦pòP9¼?:"–0*“ó’U7 @Ý©„…XÚlræ·y<³Ù\n*×ö›«ìܾE¼½œd'+¡H@o’¸ÙbqüÆôÝʘ&ˆAÂ(!¢®±0o.€çÿûy‘n!ï>ƒˆ‹ÁÚh¾±6éê^eo$„›]Í®NöИ¥ËÈ7f[Ó-†ü«j—±X4ްÿ‡Ã±ØÙ÷)))iiiì¿ÓÒÔuB/# v÷_hsw:üLJ:xõQ5ôä¹Dò¬«‘ˆÏçÓëõkJV®=±^öemóé=ͼÁKkëêö<F_XûÂw¿û”ÄÍP¥¤¦§ëï’'¶Ê>é"eÿp7oÁ"šÿWEvÿœSŽú…ysïºkÍü깡6x5Ÿ|\qݬ„ßZ.祬t €sçÚuÁL³YÆ) c±h!_–bµœ*­$£€HEÕRž¬„Ñ´4µôÙíwØtÖl»-.ÓŽP(ättS†%A|.$Œb±²h €o¯O`åòËÈÉ¡ˆÑdb@MR/¦aðýÞ Ÿ‰¤,:£‰×[u“L½‘7Ú´Y5Ÿ’’: •^ïù¹´zÛ´¹;ƒBè‚ÿ¢£Ï=ž”ÐÁÈ«ŠøÂŠ[És‰ äÂíñp§áøE ßmØ+ocBBxÛ™ÝkJW=öÍǛϞïêîêêÞþþ»+¾ éÙ‰Þ OIImõ¶ÉEË©ÒfXÊDÕ5æÎ©¢UwÈIxÉ?§Ü:¥ºë´ô ø¸«~¶}feåœ “q(e|ÇÎ] Fet^ÊÒYôôºuÁ¼¼<§‹öõùõzý k‰ôkÈ,û4š?¸HÇ*üdE"iij¯ï€¤ézl:kf†)^7㋎ $Œƒ©­ýäÍ o=þ'©+þêG‡º€ƒÅU6µ©±þ½m»Ä»ËÔiÓ©«“‹q¬Æé÷8ýžtàÙÒšþYêM¾!{ø+´yϳÿðýIê›4:TÑêê£Ïÿ÷ï¤WE‹¦VΞK_U‚—Ë••e-5•YÏÊ^z¥ÙÕy¬«z¶½òý ;ªÙ»ÿ@ùŒŠü‚k$kÃ¥ê¢òÔ]eºFuõQñtæÍ§i? Ì?§Ê~­,ÂhH7ö6UXÊï¸måP.ˆçŶֳ‰ýRÈ弄K‰ÒñÊOà årqUúúúôz}…¥üPû'Rî*9UÚlûLÛw} Þ]$>Y‰D"ŒœAâA¼Ðç,5MžœW[ß×›š¨<A|.WFͲFûÇKjj*¢Ò(2ç̶Wxaí‹âé&ãŒ×NäY¤V«ì¶±Êò} ÑTUj…¥ÜÈ7ŸÞ3^#¯|´8¨—½vž2‘у~`Uùû¿ÿž^o±&òr”t$ä#Óˆ_µ?c1¤¤`éäEmž ²ík=žoÌ+.™vßW³¥é¯üñ—¿ü¥4kEJJJjjjoÐ-×Ó5Þyg£HׯšY‘¨íœx¤qi²/q¼©ÈœsÙ™«4jÿ¤ÂR¾|ÅíþoÓPû;¶ÿãžM`²µQzç¥\£@Sc}·S¦É>?c±XJJJ•}º”ÖvÅ™¹ìXE¼ôA÷éÄ®ÆÃ÷gJJ €|SÎáIk›°b»e3*âµîð÷ù¤\¾HœI Ú::÷?¿yöÇ?¥®øËÔ¥. .m¬œ² ÀÚß=ŸÀ³Ö+)º¦€z;I‰!¢ ù÷•­âTiÔ'D™µð+÷ʨŠøêW–W%bà>‹iÔüŠ"E”žÜÖ¼7 ._q{ù´R}~ÿo~ýŸR>dê8*×ÊÌ ›ˆ§kÜ{ÿ—iÂ.ÑhÀ¬ly¾¼Aƒ«ÀÒ› õš¦æŸÏ›ð[{B^‰?¬‰×8Óܘ¨ š3LJ˜B±h À K™”»îù¹slß*buѪ™²ìÜ4*ÄwdÅvs²sã}c«qg[ÛùÊ#Ïþó?RW|¶Ý¢. §J[Y´„Iûõ^Ó§M£Oâ‡^Ä¢B4ØtÖ‡+V[tF꓉L™µpÕ”›ȨŠ.š7wf%Ù"„R`JP!¿Ò>UöÆ8ýžƒðwO|7ÃdPßмçƒmbß—…&õݲÙIçÎðþ–wÅÚËM-±Û©^üvM±û:x, `Æ_w®¹g˜}Ýï_øŸ„Oþ }=Ò,Ý$‡#Q,-.RÄB,hÔ|¹uŠd[» ÞÔÝÕoêw\H²Â¾Œ6Uâû²ä [ü æÙÖ6ZB âs!a”H$wN]ÊJ‹nø¿MbßkÞ›¨Ã“{—XTb@oºúEfz4š ÜZ4©¢Ïýê—r©¢ö,ë׿ñ- ‚PL]V°H ‡gÕ]§\Íz½áÉ'¾ÃþòÚº ]]âæù¦¤¦8ÞuR–\dÎaºÆÑj±°bÅ­4ÏGºkŠÅÌÏ»N–»wxœ­Þ6½Þ0§rȺ'ë_Õé÷HüI­éõ M‰º`Á5×(e E£ªìU®(·N°þ×Å»…¼'+Òÿ01#Ök 'ÇûÆ–† Æg[Û(h”q•£^¯—N ÒÓÓYMzBvn-šW`È÷ù¼I—M ‡#.—k"Ï¢ˆ] ®+ª„ï»Á ×ðš5¥«v·~(‹±!œ*mEÑÂRs‘Ïç}iíoÅ{öžã}ôÑD­'´ç=“Zm0ü%e/!y"øHúSŸ®×h5+‹–¼V³YöO½½ù@V…¥¸dÚÊåK·íÜÅ~úÓŸýË¿ˆU¢+MfÊ0"ÁZÇY>/KÜO×ÈÏË-(,VìÒ¡Õê4þ³ ‰x½^yÛ“ššš™™Y’Q¼WuL–â쵎Ó†üû¿üàÑê¸ê AXû»ÿ¾ç¾/½?Ùäg2ÄØ´Y:Ï'¬Xº.]ŒI>ºù™iÎÌàMeÖB±ƒÐsöT(êÖná‰êÛ¸úÓdÊ`Æô ÷ž äçæÄ[Ûäì™æI‰ÊŒ’8“t°œúü¼Ü§žúþùȃA­¾\½Š0‰D‚¡P²|*FC³Y ÜZ4¯ÂRîóyüãg%0’ž>}Zgi²Î¢Xlì „ï{ðbÉhÔëõË e¥gîm96Aì˜&8^·ºô›ÎÊÖ QKÏš;o7™')ä‡o"/GIGB>2øðý ÷Z9«Mg]\P%¥gÈU ámgö~iúêz´¾¡élË9¯Ï÷úk¯ ¥£ÑàX× Y~t 1•3¯SòºÁqð™P‹*b‰ …BŽ/·N‘å¹ÎÑ2?×m³ç”O+*9úxõ'w¬ùâØû“-ŒŽ>© Ç8UšFÍû|Þ>ËØs'‹1yF7?½^¯)ÃTn*¶0Ze¯°yã[âÝ"?7§¸´,Q}Wƒ´4½U7Ib34wÀÀjµÄûÆÖsm3%ZÁHœIV&ÒN^]ùGJ¥'@™µ°ÂRà¿ø¹4êFå¬ÙÔíã ·ÇÓs±'‹VXÊï+[%W -BÊGîGfÜÍ*oüàO˨ŠÎž5³rö\‚P&B,Úsñ"€ÙöJæ-/çö#ž~ú‡<Ï8öñ‰Óu‰÷&V«TÇ"Á»äIÐ5D:í6ô -¦>¯¦B_ «ê°bÕÊ¡^~t ó_­pÁQâhM7hL\Þ±Õ2IQS¨¿¿?‹òEM7ð:– ´çOE|¬œ)W7†ÃaYéRÿ$µyÏ(œwÕÚÎóçiý$>gvut>ÿëÿšÈ=@Â(1V\SžûÕ/Å3-ÌŒ²éºt=õü8£?p:œápĦ³>2ãn*9:Ž©´OýÒôÕ5pÿžŸÿâß{ݹZ’Ÿ›#R¨A‰"‰ø|>+§,‘ÒOy(wÔ°b‹>üûË+¯­ó÷ù{.ÚØÛ$K¸(Ó5ˆ§k,¹éFšÛ£Ø) ‚ÀR¡ei@­ãL ¬¬œ“m2-wû®Ýc¿QZZäp^Ê7dh9Óœ¨ Ú²²5…„XÔïïP•].Þ]X%ÜCö‰—D(ïÉŠ x5'ñ}}n%%qû_p8AŸG[GçÓOÿÄ•GI%ÆÄ`UT²ú€×Ï¡pÑqûô{Ñé 5¿¦tÕ ¹Ô'ã N•vGé’e‹¬{íåß¾ø²•7†ÙU?úµ¯Ó „òq{<áp$ƒ7­(Z¨„öloþ0 .¸qé nF_XûB¯¯V©X¶CíŸÈò™®±sû‘–hŽã(\tt° Qfk#Ã>Më:à–eCŸ¯¯¯­õìXî¢JIU©TÃyɤÑ8ך°8³9CqSÈçPa))=‹S¥±<ÂwßÛ&Þ§÷d%Ž(0äKÿ D‚z½!Ã_À¯×ëAÃBÂ(1zdQEÃÔ2ÒËÆ-B,z±§ÇÝë°0oîCwRZý¸Á¢3>\±šeWýüg?Ù¶sŒá8¢Øs‚Hzz.ÆbÑRs‘ò ¼Aÿ¶3»<öÍÇYè\WW÷ö÷ßMØVÇhPã¬õý2,âësçTєҤBC­³Àò·#ÍlxóͱÜB¦Æ%n‰ÉÒepºzuÁ’âb¥M¡ˆ ô÷÷(·‰qýYöivnß"^>ÇqòUbÑX, @ú‡”îþ •à.FÉb\2asêI%FÉ­Eó¤WEÜ<ô51nðùûœNgw×yJ«7TÚ§~¥âÞ ÞÄŠŠåÛ wÝy{~Á54.‘,DÁãöX9e™Ìš]Ǻª|㱿aÅF÷î?0Æ@9†*%•™#Ë.*¶®ÁqÜÒe·Ð”Ò¤Bƒ7è¯qÖX¶dÈ=§³g,Å%är^`ÓY$°2˜2w}}}fÛg&¼8 §J›mŸ àÉ×þ¹sªd?؇#Œ’ÿ±ïÅ´Ò¸wçÅ‹ ˆ‘11sêI%Fó ‡äª(ÏóUd“21†B±XÊ¡ûXZý­Eó”PZŽÝ.ùž²[YúüÆ·×?û“ŸÊXT”±|Ù2\"ˆ¤ÃçïcµVV-RB{µŸìö;ŠK¦Ý÷ÅÕì//ÿᕱÕô))©­Þ6¹ÂEÅÖ5J‹‹(ZL_„K©Ðr틎Ÿ¯pË­_`GWCìu¯úúr9/± ܦÄ9/q§Ì© …B¡FÍgæ&öÊÅ™¹5_]}TTÛ %œ¬0ÿ%V”VJØ÷ÂjµÆûÆÎÎNZ< bH%âÞ1ßSvk…¥ÜçóþèGÏH©ŠX¼p^:m¦' B,Z0¥ô÷/ü·Ïç­°”?\±Z –ÄD\™s›y!Ÿ¥Ï¿½é=Ù›4£lú²å+ih"éuõ²<âJûTÙÂÛš÷"Áå+n/ŸV Àßßÿú믎Ðo.“ IDAT嚪”Ôôt€CíÇeùPåÖ)bë+W­¢™<"‚p)¶Wzœ~ó›;»r¨×4Ÿ}ô´J¥†ÎK&^ û|Âô#›U¹»V4:?wNb/Ë.¸}«ˆÕEâÁËÊŒ²¢´RâúL)*‰÷ÝÝhñ$âb¢åÔ“0JÄ×ÝW¶Ši?þñ³ÒxÐÀóük¾H£0ÑXyûšŸüøÙ¦Æú Þô¥é«TQèhRÀ|–Ö”®bîóO<ù¤ìéól?ýÐ#_¥Ñ!ˆ$EˆE]=½ä^/WÅÁ8ýžƒðwO|—•\l>Ór䣣¾ V«eá¢yL„«ì×BL]cFÙt‹ÕF3yŒ° ÑÖir5€ ÷w®¾k¨Dc±o²ÒhZšr8/Yu“´´¶$ê‚6[–b§¿¿_„ Þ”ÀrUeÖ ÞÔÝÕ)ê~O!'+áH€‘—úgˆý4ÇoLßMÆôDüL¨œzF‰‘RdÎydÆÝ6••<ßÕ-q/œ§×h & O|÷©ÿËÏÖ½ö2€ÙöJ MŠåâ±™÷3Ÿ¥µ¿{^^÷ù¿<óX&ÝýÅ{ht"©éúúú4j~eÑ%´§ºëtƒ«Y¯7<ùÄwØ_6nÞâtŒr¤7è||^— tÅ‹Ó;ÁPˆ©ZeÖBYÐáqöÝ6{ΜÊk‡zÍÑcâÊ<Çèö;¤ÿPù¦çε'ê‚99Š.‘ïóúÌÊN˜¥m¹u*€õo¼.^›‹¦*ädE6­ ÚwoÐ €ùþœP(4öJ/1Ž!a”7äV D~ýüÿ.}‰À “‘ÂE'2ÿöo¿Ø±kï÷¿ÿÔ@èè¥K(tTxÝ=e·²å¢ºúè~ðôþƒ‡•Ð0«eÒ·¾õm*lGã¯Ç+‚Mg½!·B íÙÞ| 7è..™¶rùR±Xìw¿ýÝ(®£ÓjU*UoÐÝì’§\•ý:ˆ©käçæë]¢ðx<¸$EÉÂ¡Ž£¾pûC½@ˆFÆ=¦NpÁ/CÚ¯‰3è8ß•¨ Z&MRòêïïg•I}Ÿk´°œBQˬݴh‘Bz/"4j^ú‡‘ ~'€Ì S¼oLˆ= 1™ 9õ$ŒŸƒ×=Tqç¼¹dŒüºmå­.:Áùù¿ýâÂdz?ùéÚß=ïóyKÍEͼ_ eæˆnÈ­xdÆÝlgüܯ~ù¿zNvŸ%©¢1žbQ—Ë`aÞ\%$„„ð¶3{<ðУ×Nàíë{kÃñ^Çh4â’Þ$=¹F‹MgíîêO׸åæe4{E0L ª5 ê-H°¸d›óWeëŽ]ñ^–ã9ÈQ`”S¥eð& Ü·L-«PòbÑ@  *»|ìW«²Wؼñ-ñœŸ›£¨. …B¬é&‰ï{¡Ï `òä¼xߨØÔD+'1:&BN= £ÄpTÚ§²ôùî®Îýè¹"¿®)È¿eÅm4Ä¿þüßT*õþƒ‡ðƒ§îߣQóË =Tq'eÖËN®Ñòõ™÷,Ì›«Qó;·oyâÉ'%vfRE bü …X™Å•S‘=Ðáqh?àé§Ȭº}|ât]ñ<DZpÑ:G‹,a~^€vméúƒ^á:Qr!Ä¢~?¤jŽc]'¬¸åæ¡^àïïol¨‹ëšêÏ"F¥¶¤gòVuõÑNxåÏ"w\a)7ðº1}X^Ǫ'íùÓAK+g*ë;(²tRÇ;üÆûF—«—VN‚ F‰!áî)»uYÁ"–>ÿÌ?þHb«¥Á<øàƒ4"ã_ÿõ_µZm¯ÛóÛ_þùÏ~ÒÝÕiÓYYfýwuÄè°èŒ÷”Ýú¥é«3xSScý~ôÌ«ë6(¡¢èg:¤ŠÄ8Åíñ„Ñ Þ´¤p¶Ús¸£†Yu?úðì/¯¼¶nä5ÝX¸è)G½\+9 öO×XrÓ4i ;»ª5j>îª°àÆ¥ÌyìªlÞ¼%®k2ç%éÍǘ¼åèNX}–5 Îì#‚”[ŠÆrùy×8t`ŸxÛ?ƒA¿`ÑbEõFy'õo_Р¸4nÿ%·ÛMË&1ÆwN= £Äåpª´r+¾1óËl‹üóŸýD^ã”E æÂzÇ<ûìÓÓÓÔÖ7<õýX÷ÚË,³þ3¿LžõRbàu·ÍûJŽl­Xû»çŸýÉOeŸÀüÜÑœ^pª4¦ËïÚ½O¼ÎS¥À](À<»$Æô°˜3â}£ÓqA\ F‰¿’D»»:™—´òa—/[’_p 1_yôë³gý%J¢×íù_=÷£=Cò¨°Äy&‰2‡¥ÇÿÖ«ë6(Äw~0¤ŠÄ„¢çb³ç®´OUB{µŸìö;ŠK¦Ý¶òö——ÿðÊ0«.Z㬕%\”S¥Í°”AÌ4XeŠã¦jUÙ¯“«Ç»jܹ枡^Cì½w7äRr9/±"­Ý] <åµXmÉ2…üýý‚ dð¦Qx™–[§hÔ|uõÑó]Ý"5㸥ËnQf×…ÃÒ{Àº>“ âŽíè¤lz‚∺`Âbàuå–¢Öi줫»«sý¯+ÇHºhJá²å+i˜ˆá¹ç¾/çØíïný‹‹îÙ–sÿñ«ç®)œ|×]k*+ç,Ì›;Û>ó”³îx×§Þ Ÿzl4›{±*»œ%Zع}Ë»ïmS Ê U” &B,êêéÍœ”¹ ÷ú&W›ìK}HokÞ{ÿô;×Ü}}}Cm}ƒ¿¿ÿ­7×?òÕ¯_e#®RiµZ\JI–žYöiL×oUW¬¨1>ð÷÷gd˜l:k®Ñ"½g€³Ûï°é­s*¯ê9âÄÉš‘\J.ç%#¯Ðy¾#QÌÏÍI®YÔß߯×ëççU½U·#®7VÙ¯ðÎ;Åk[iq‘b7u‚IKS›x}$´mÞó §Ä]\¸óüyZ3 âª0:)³›¯)5¶˜65Ö¿¿å]åH¢LÚxðÁ‡i¤ˆ‘°à¦¥YÙö—^úc ±?^&ζWζWÖ8kO9eylHÞµ¢Ü:•å—Añ’(€eÓzä«4p1ÑèúûûµZíêÒ[^«Ù,{{œ~ÏÁŽ?/+XôwO|÷?xº×í©«o8òѹó^öJV]´ÆY+—žËÒ`ÅÓ5f”M§“*±éëóëõúÖ¹v8Ç»>Y5åæû¿üàÑê¸ê „hôÿ[ÿÐ#_æ"œZ ™œ—ò ÙêNÕ$ê‚&“)¹¦ÏëKO×ò ¼näkQ™µ¥Ššh¸rÕ*Åö[$`ä ß×ÑçP¿;ñ=ÄÕ!at¢`àuùƬ|cvIF±FÍÈüHQ.Ò8Ž»ïÞ{iMŒœ’Ò²ï}ïïÿ뿞 G"ƒÿÎäÑ “ñŽÛV._q{…¥¼ÂRÞíwïú¤©§C–¤ÅdY.Ê-E³í3ÙZáóy7o|ë£#Ç”,‰‚TQ‚˜Ø¸{ÝÇÙtÖr+wÔÈÞžê®ÓùÆœRsÑ×¾öÕÿøÕs6mÞRT\28ÁV•’ªÓi?_+K#ˬ…5ßÔX/ÞVPɢƸ¡¯¯O¯×WXʵ"‹Â^çh™Ÿë¶Ùs®)œ<Ô\úèȱá…QuZwP†FVº€3qšQN¶=¹¦‹A­V;?ïºÍð]¬€Ãú7^uk§ä¢ápx`þHIH"A½ÞÀó|\õ¼^‚¸êouÁ8Æ¢3f¥gæ³³tY6uàïMõ{vpäXµÒüR~é>*-JÄ=Û­¶gžyæ7¿ùu«÷²bÖLþoÓÒ›Ü|Ë ›=gÕ”›“ƒ½M@:N•Vœ™;8D”…“Ÿ¬;­Ìµb0wܶjÁ¢Å4ˆ1abQ—Ëe±XæÍmrµ:ýòälo>0yf^e圕˗nÛ¹'‹½ôÒKOÿà™è ú””ÔVo›\­ev+ïoyW¤ëM)L¢J‹ÉKDXÄt¹¥H®Sã]'—,ºë®5ìàJúüþ}{v,^z뛎9/ɰ+3ñFí‰s^ÊËËKºYäñx´Zm…¥|o˱‘„ä-6µ»«SÔ¤ÃëçÌVr§ ‚00$¦»ÿB!?'Ûï±Ö麚©e´lÄe0:®È5ZL¼ÞÈòM96mÖ@d(ŸÏûÉÇGkëêNžªSrØ×·­¢ÅšºtýÓ?xæåß¿pº±ùÊ ƒÛvîÙ¶sÏœÊko\²¤²r í º›\g&xÒ"sNqfÁ@8¹Ïç=t`ß®ÝûÄ+¥Ÿ@8Ž»ëÎÛ+gÏ¥¯ALp‚¡P___zzúêÒ[_­Ù${Z@HolÜö¥é«xèÑú†¦³-çz\½omxãžû¾ @•’šž®p¨ý¸\+?KƒO׸i™ÑKD__ŸV«mŸ)—0Zë8³ ÷úÊÊ9ÙvÛP›‡÷¶'Œ¦¥¥áRñD‰aá# Üó$c„GD€F£™eŸ6’Y4?¯ À»¶‹×¤üÜ…?C¡ù#1Ž>g!Ziq¼Â¨óâÅ© ârHMV˜ÿ]¾![£æ¬égdJƒéîêlj¨¯­«kl>›Å|cçѯcßîÛwî\rt0G«O­>™a2Λ;›² ¤Ý~Ç)G}›ç¼âŒ$€S¥å­ƒõPÕÕG÷ïÝ›!¢ ƒAÿÈCQŒ9AŒ^·›ãø Þ4?ïÚ}­ÇeoO‡Çy ýȼ¹ûñgþñGÁ`ðØÇ'®­¨˜ZVÁkx.*WâÂ¬ì ˆ™«|Qc< …Âáˆ&/³Ö9Z¤o@HŸrÖͶWÞ²lñ«ë6\õ5çÅ3ÍSŠJ®¾-á8\*ž(ý#USc}ÂöW—¤Á|>ŸF£‰¼nàu†|ŸÏ»çOÅkÏ‚ùó”ßi‚ ¨T*‹Î(ñãÃÿEVkÜš¬Ë墓 ®„„QÅaÑy5Çþ[£â¬ºIŸí/M94*Í0§RMõÝç;[Z[êš:Ïw'‹´Á˜Q6TQ"!,^¶¼¨¸ä…µ/^Vrô¯ž=,€ôšÂɋ̛¿p±MoµX°Ò6ÏùfWç¸\aòÙ¬òÝà¥cÏîN~Õ§îG¿öuªGLÄ_-ï®kVÖl{¥B–ñÃ5%™SlöœG~à·/¾ àµuÿûÌ3רm6µŽÓ²´*×haºÆÉ:±¢ÆxÂçóšÍæù¹sdFïút¶½rùŠÛ‡ñi|饗~ö¯ÿvåß™óRoÐ-} ·‰×è>Ÿ°µÂfµ$é †B‚ hÔŸ/¯ÏÏ»À®ï‹÷°i0è“"ˆ £&^/±0êúXmqW³mii¥Õ’ ®dœ£ óæ.Ì›Xy”ÕÕGqÉ?±¾¡)&ELèP(Á5e΢qL~Á5Ï<óÌ‹/®í<ß5ü+϶œ;ÛrîÕuʧ•VUUÎ_¸8Cob1¤\ÍmžÎd#ð^Ë7ä -¯®>zôÈ‘¤ÓC³gÍdé¨ãZŽ&4â $‰¸{ݦ ÓšReÙþ,¸qim]Ýþƒ‡Ã‘Èზ””X5åæUSdkÒæo‰¤k$‹¨1žð÷÷gd˜2xÓ÷æ~]Þ–Ì›ûÿÚ»óà(Ï;Oà¯$ÔBR·„ „#N™KÌeÌ)o`Y0¶ñcâ©;ñf2YÏdãu9S©­™­ÂI¶jk=žÚ#Îd<ÎÎd*c{&³Y;ëØ ±ñµñAŒñA„¸ØHèØ?š( `›C­~»ßÏç¯V I/¿÷yß~ûÛÏïyçý䙟÷[nkk-ˆ ?ûi~~iÜø=M{ëWM˜0>sGQKKËgÆë‰‚¢™åWAðìs¿HÝ–¬Xvmf¼âtwÇb±t½ÜÔ×Ï¿Øi’Ó»ª!ã˜1:¼¿«µ­õô%NkëÀëô®÷>‚ ÓÐór/iR¡¨8þ‡_½ïÉýpû+¯]È¿{×{oïzï¯ÿÛ1£+/œ?sÖœI“§M)«Mά<ÙÓµ·uÿ‘öcûZeÄýšªKÊG¬)©UT~fÚ|øà›oü¿wv¾“Aýòg±¨(ðéÚ:Ú ‹ “¹¡rû[’«-Z²$ýUJel¦„Y¦½½#Oņ›~öóÎ{Ñôÿùý/÷ýÑ×Ï}eOï6'ßg в²²ÌBñzuIù']î^Y^Á3ÿçS÷±z,Ë”>ÂÞžÞônÀ§¬ê{^ÝÝÝímÚ­à,Œžhi9Ñò»“òÿá‰m/l·_3HRQ£(‹]ãÍsçÍÿÿó»ÉõÑ/Ä¡ÃÍ?zòÇ?zòdzê¦N¯›>{ÎÜÊÑU!iÍGt9q²m_ë¡–®Ž´ß¸)QPTRPT“3ª¸¼´ ä¬7î½–)Ë ŠŠò‘_øÂ²ø6ÇNGQc§ÈÑc§ßÒ;Úüïüç¾þþPmÞ7ÿãŸæääüÛ/}q`‰äǾÿ½_ï|';ŠŸA¡FŸOö55>üÈ_„p#w8ññ‰ß­.zìhó·¾ý Ý ãÆÏèQ”Œ×玞y å¹óÝyùóFÏ ‚à§Ï>ŸºmX0n¦”«­£½­£}àËÿþßÙý›=!ßæ}M©[:yJÄãÅÅÅAüà±ï=Ê¡ƒ%ÛfŒ®[¿qÝúÞWdŠpÞmiÝúABY£fü÷ßÿ_~ïѦ}û/껺º’wj ÿÛ¥%ÕcFO›6eÂÄÚúúù•Eg…M­ûºzº´ëêí>ÒñaWOw*ºïcyùÅ¥AÔ$ÆAPSZõIëðþ®o½±·iïþCÍY3Í<»Û现ÇS¡¼¢rõÊåÏ<û\Ø6¬¿¿ÿÑïýå×¾öµäÌÍ[îzwçŽG¿ÿXÔ<ƒBì¾ø™Q7=„i{__ßcõèÚ}ý§¶[·>Á7¾ñ`÷°žÊgôÈikm‹ÇãSÊj/ŸûÁÿ•‡+xýõWSwm‹ÅV®jÈÐêÝ}ϽA|û[[û0´¹ÿþ!»3Þí›ïêíëû¿©\u…VzÒÆ=è2EÅñ{¿ü•¶=ÿO?yº·÷Rz^>>Ñòñ‰–·w½—ürÌèʱc*Ç7abíäÉÓâñÄøDMgÞÑèôv8ÑýÛé'.niÿä-ׂϺëZ͇=M:v´9ãRÑŠò‘™>lzûû:;; ýôî³?¥›;zVÿ÷O¤n¦LªÍôFï’’D˜ƒÑϼDPv£&\„ÿ¢9䇩ÇYiÉÒåS§MÿëÇ;Ô|ä2Õ¡Ã͇7¿úú[É/ ªÆT–—(¯(¯¨¨¨¨ˆ'&MžÁˆ‚Ò%>“áéåhkk}ÿý]Á7^ ‚ qÏÞìÞqµ'ÜqÇ‘]ÉéÈçòÝ}Ͻáì©ß¹ë½—·ÿrÁ¢k‚ H®,”é=õ³fÔY½.$’ó.CØSª§çÕí¿œ¿èšÏÜþ¯ýñeVO}II" FNKKKaaá䓞Ë{­»÷ÔÀóuF”6>˜Ò+Ï5k×fzï¾çÞ0÷ÔŸ8cÙŠ!pëmw6|n«B.kgŒz_Z‰D|ËæÍÑf"aÏÊ7 _½ïŸ}æ'?{~[OoÏ`ýÚ®®®äÝíÏýÖˆÒ’²²ÉÇÓ¦Lº¨_»wïþŽ“'“³>ýg~,v±?ÇÓ5>§LÞÐÐÎQTZ’¸zÁÂKøÁ4Ö3<ŠŠã .*/+y÷½÷ûúúž¡2¢´äK_üý›6ÝÖÕ}J5²ût”Y†åå|ÙÖÞngP=“æÎ›_?gÖKÛ_ UG}çÉ“tôʧ—š=§¾¡¡áðÁýGŽˬcäæM›JG”eÇñ^‹Å~{ÉÚ×Û×y²3£¯y¦M™ªÌ½±±qñ’k.pûëçÌzñÅ ˜k¶º¡ah>ÐMõøìíí-.**Ê/ü¸û££Að¹Ú¥# JŸzâï>ØÝ˜¢ÿTMuÕÚu²éxŸ;o~ãoÞ?~üã° ÔqÕUcªÆq=Ã|UC¤.ø‹ óòò’srrrrr‚ ÈÍú·nýÆ­[Zºd‘qœF‰DüË÷~)9…>CG‘!”•êç-xàæ]5G)Âã_®ZþgöŸæÔÏW §#ìñTHöÔ‡m«^ûÕïîÜqæ3›·Üõ{[6gPakª«2ý~ÜÙ-ÙSží9zìÃŽö¶ ?l·n}hëÖ‡b?ÁbÈÄb±lš…×ÒÒü¶}>QP4>QÓÖÖú³Ÿ¿º¿¸dq¾ØÝ}Ͻ[·>¶»r8x0]ÚU ᔫ¤Ú¼«æÜ÷ïîs­L8Ç7Ýrû—ïýRMu•j¤ýMõ÷ýöÍwÅã ÕRgÕukj'NÛV=öøÿ:+'ʬžú†ÕV »°ÝÖæ_Üj•!﩯¬(ϦÑÒu²«¿¿¯²¨¢º¤|ñØÙAüôéêêêJÑŸK$âY¼¦|ØîÊuðÐ!çC8S–·ÒÐSŸ‰DüŽÛn¹vÅêüËût7 ­ß!œü¯•~0‹9¢ìê ËËJö4íí>¥}{¨U”¼uÓMk×m(-1ô­µ™øŠ–5§£Ì’–Öï,ÞãéªgR{êûúúÞ}w×¢E‹žÉ žúŠò‘믿!›Ž÷lj¥¶žúãÇ?^ÝÐpQÛæžú)“kÄÈ‚ñÙôçææÆb±QÅ#'–N‚àÏyädÊ‚ÑÏ]·zÜø Ùz¼‡­§~X^Þ.d‘Šzê©Ïà·ÌÙÛJ•`Ô8Äb±Øâ…Wÿ›ßÿâ t”„'È UÂ.tcªÆ.[¶<·¿g߃Ê24‰øç®[}ëmw$Ïé J2îE- NG™%½ã3ûöxÚ÷¢âxN_ÏîÆ=ácmmí½Ý“¦L=óÉÙsêÇU~ýÍ·Â|t¬^¹"¡F&%é<~G”…'m?~ìÈ•3g]ÔaÛÐÐÐÐÐð‹_üø'K–.W ]'ü°õÔ?¿í…}MgßÛ$ä=õ‰DÜ™<³„§§þ·v\ÂO…³§~ìØ±Y6Nzz{;;OGZ…ʼnšêªÑ•£Rñ‡æÌš‘C/<=õg­j ¡£I>šH©uÓ·lÙ²hñ5ƒ{CÆPÍp ÏÔc3FS'?›2uúÂW÷õtn>¢Dƒ+9£üÎ;·\9söYß2c4j§£Ì’öñ™e{<$Ç{{êß~ûíùó矹 QÈ{ê—/]2då†LÏ ÂÔSß›šrÒ éIDATßߟÓwjâ¤É»ý!ì©¿õö;²o|ööôwwwçäæ]YWW7èc&‹Ýyç–ü´NG²z†§§¾¦flê¦ù_`=uôf­ôÞIòR‰&…0È CÂ.M5ñè K6ÎoÚtó•3gŸ÷ X0µÓQf ÉøÌš=žã=l=õ§Nõm>4§þª³žgO},»íöÏçg]Ev£§äpôÔ>ܼ|ùŠK8lCÕSŸHį½vYöÏÞ¾¾á---½½½¥#ÊJG”íxëööŽAüõ³gΩŸã=$=õ£*ʧL†zš¸–I¯ÙŒ³w¹Ì‹€9³f.\´xPÖ…0ž:‹ãëÖo\¹ªaû Û¶¿òjkk›š\‚Šò‘‹.Ðk „ÓªëÖìnlÜý›=!Ùž»Þ{yû/,:ûæ!ì©_0n*>gh¬Y»ö×;ßIï6ttvîxóW3g_u ?žžú%%Ù:HŽ?ÞsFô¼é¦›žzê©S==‡› Êï_±rU½’’ÄÑc¦qöìir„Qœ1šä£‰Ë4£núÊåËn¹õóS¦NOõq8g8¦}ê±£C)?›X;ùÚk— ÏïhooimU“ ?W¬[»fýõ7\HÃŽ£Q;e–ðŒÏìØãa;ÞÃÖSÿî{ï/^´ð¬™˜!ì©¿ë®ßËÏÆ%¹£0c4MOýþý®¹fé¥mHzêgÏš‘ºùwéŸ}ýÿì¤X:¢l{êgÔM_´øšïiï©?ÙÕµråÊÔSGo¦0c4;­[¿qÝú?þ‡'¶½°Ý(¿‰D||MÍĉWÔ_5Ïì€Q!K–._²tù¾¦ÆçŸþ½v‡píÿðœ.æÌš¹rUƒs…Óöx¦(¯¨\½rù3Ï>†éëë{øá‡ÿý×ï?÷[›·ÜõîÎ~ÿ±´o䌺éNòY fü3ꦧqêèGÇïkj¬Å¥¶[·>Á7¾ñ`¯Êª«ª"5`‚ ¨UÑ|äèeþªåË—Gö¸»ûž{ƒ øö·¶¦eêhwwwG{[¨Nà®jH#­ô|†Šò‘•£FMœxŸqã/íz²òŠpó–+:ÚÛv¼õúë¯¿ÑØ´OM’b±Ø”IµWÏŸ7µn¦j'T=õ~ôÑ?úáÆo>÷[!é©ÏÍ͹ü]™Þžú'Ÿzê¾òÕKþñ´÷Ô—WŒŠÚ˜¹üžúšê*ï.ÓØS¿¯©Ñå:$E·•~€žús_¢ÆÕŒ:eòê•+Öo¸~Ùò•³çÔ?¡tDYº6)ä­ßéšü¯•>íòc±ÚÚÉkÖü«E ” ?t¸ùdWWd«Q;qÂÒ%‹7mºyÞü—¼è°Vú¨Ž2KÇgFïñÐï§{ê_z¹¿?ý]õûœ6eÒ¹×`a詯8aéµ+²õxH+ý€´÷Ô·¶¶-^¼è’—eH{Oý7ݵñyù=õ7Ýp}HnS‘Æz¦±§¾¢|äÄÚÉ¡ª§žúÓJŸå"ÛS_S]Á„ ã ‡;vìÈŠQî¡t9£(0ù?ªF®ÚpÃÍn¸ùÕW^zé¥íM{÷¥w=õ!‹ÅjÆV]YWgy §#ìñlR^Q¹zŲôÔ¿ùæŸ4©*½=õË–.5T²í­Aúzêûƒþí/l[uÝšË9lÓÕSŸ|KÍ\jO}"7]1)]=õvUI‚ÑìTQ>rxAAòq¬ V5fLòñäI“‚ (*Žk[€] &®cG›ß|ýW¡ºÇñàžaÆ«™T[[?od¥ðôÔo{aûìÙs>éÊ-]óûjª«„Y)=õÛ_yõr‚Ѥ´ôÔ—––FyÌ\ZOýŠe×:ÜÎ4ô=õ'NœPvHÊIv ÙK{üøñ.·¹<£++ÕS=Õ3 b±²²ßu8nn>÷ß¼þÚËìÞéÓHî½6uÚôÔM-¿z¢žê©ž¨gÊ_õâñâââäãSݧ><þ‘š¨§z~’}MA<üÈ_\øUåƒþ‰zŸ¨çÐYö/òcùÉÇ999¹¹¹£©V?oArfeG{Û»ï¼}ààÁ={šö8þ-¯©®ª¬5©¶¶füëlpž+Ƌ쩟3Ë|s D£C¤¨8^?oAýo¿Ü×Ô¸woÓñãÇ÷ìiú¸¥¥µµ-½›—HÄG””L˜0¾ºªª¼b”7¸@ØS‹ÅV®jP. <£é1° é€wwîèèè8pð`gggsó‘“]]©è¾Åb•åAL˜0>‚É“&Yw€Ë¼²Ý°aCðY=õ³fÔ¹c'*‚Q€°HÞÈ¢þœçmþðèéÏÞßÿàƒ‹úÉ[®îº@*]HOýŠ•« Á(@Ø•WT,ñé.À„Ö§ôÔϨ›nÙz lr•¸|Éžú›n¼ñÜo-_¾\}€°1cçí©¯©®²¬BfŒƒiÓM7ÕTWUWI~Ù°Úê¢@ F€Á”ì©ßxýõA$q åᤕdÉÞùšêªúú9ª„“`H‰ 6X]-­ô@JHE0Œ‘#"G0 DŽ`ˆÁ(9‚Q r£@äF€ÈŒ‘#"'§¿¿?‚ÞÞÞ§zzzúûú•æräÇòÕS=Õ3çÐÜœaÆ |yªû”š¨§zª'꩞™.///7ïô ’þþþžS=j¢žê©ž¨§zfºaùÃrrrN_;åääææç F²Ò@0ª•ˆÁ(9ÃÎ}êäÉ®Þ^Ë\–ââbõTOõŒ‚¼¼aÇ |ÙÞÞ®&꩞ê‰zªg¦‹Åbùù§×dïíí;y²SMÔS=ÕõTÏLW8¼p`ÍÖç F;;;ºº»Õërœ<©§zªg+ˆÅÎ|#ÚÚÖ¦&꩞ê‰zªg¦KÄãoDûz{ÕS=ÕS=QOõ̱üعÁ¨Vz r£@äF€ÈŒ‘#"G0 DŽ`ˆÁ(9‚Q r£@äF€ÈŒ‘#"G0 DŽ`ˆÁ(9‚Q r£@äF€ÈŒ‘#"G0 DŽ`ˆÁ(9‚Q r£@äF€ÈŒ‘#"G0 DŽ`ˆÁ(9‚Q r£@äF€ÈŒ‘#"G0 DŽ`ˆÁ(9‚Q r£@äF€ÈŒ‘#"G0 DŽ`ˆÁ(9‚Q r£@äF€ÈŒ‘#"G0 DŽ`ˆÁ(9‚Q r£@äF€ÈŒ‘#"G0 DŽ`ˆÁ(9‚Q r£@äF€ÈŒ‘#"G0 DΰsŸ*^‹Å”f°©§zªg¶ÊËûggÑD<®&꩞ê‰zªg¦;óê(7/O=ÕS=ÕõTÏ,›—wî“9ýýýAôöö*Ýrrrrss­ô@ F€È9½QNNŽZÙm =½Æ(@th¥"çÿÆX®dÇ[&ÛIEND®B`‚open2c-bioframe-4fe9b25/docs/figs/bioframe_closest.pdf000066400000000000000000001774211477525772300230360ustar00rootroot00000000000000%PDF-1.3 %Äåòåë§ó ÐÄÆ 3 0 obj << /Filter /FlateDecode /Length 7477 >> stream xí][7r~ï_Ño{Øã¾_ø%ÚÕÃ>04@Ä¡l%3’=#g±?hÿg¾º’Íf÷és4›`Í"Vwv‘¬"ëNίåwå¯eUÖmÝ”ø§©åùAž«ò¿Ò.ÿíŸÊe}Ó—.›òeu3”Êo^?×åë·eUP³·¯­æ/¾¢®/§z,ïѸçÿ,ÛnÒç‡ò-zÏ÷_lõßtu95-ÆÚa¨ôô O5 ’å'î7oëâ÷Ÿ6zÁ<㣳,ª›ª­Ûv˜F̦­«aœ["ÄÔ÷õ4$ÓçÁ´ƒM¿n1o§&H³gòÝ=Ç.â绲º›zÆrêꛆ05ãÀbj{ Æì½I3ߌ¤œÚN]Eë÷p>Š á”ni!¼gç¸=O³N¤¢1¦Ü^¬Ž®¬›v2úû «bw=U7õ<7SU˜y!WCèGÂø/·®\ú·®ËÛÇò›Û[¬ãòö}ùåé§Wå×ÕMSžîíá£=|²‡ÇûWÅ–·,ÿpË‹.l†y.ëªíiºúúQ§†ùùó+L ½¿3ˆ÷~‡e;m«r˜jé²87½×†÷V;rÀ”úïϯ !„åÙ~z~t؃áó§Ûšë€ N¥xÀK~`yžãGqrŠ~8ýîlˆwþ£?<)¹K#w„Êçcô÷Yü³ObÉê;lèÛ'û#»Sû7#ñ/öà«äɇéxŒÆ[DD†ãeAu`eúªËDWCºLœô—Œ·ë;o¼Hš¡/[{ã-d×fÆ«Ûøðx‹ÓÅôÇ; ]ÙôÕßÏzÀZh¡gIª }¯ßv¾ÿl Y·rq:º¢cŠ7ГMǺh½BŠTŽdfpp…§ó3(Î`)›a.û¡¹ŽÅɧt~ïÎ@9y H¢lÎàï„e?¿< ~¶%î‚Ùå£kJÿéé'ú.Ï#å™èýÅhédyˆÁDùü ÂÍë{Ʊ٧GØ û«8YϾ,•1åÉwÞªƒïO‘Ù+£ÃÚ{€SI^–/ÏF–Õé§û÷ϯÊÌÚÜÁ5L \`´º#ß¿:³tŠ#=÷\O-K‡±tøq Gi0LðX·–Ζ«•_:èaM²¬Ã弨]:*†ÖKGöÕöÒq%y««îµÉÚTk^¹nòž S|µhÝT4ÿjåÜ}¾{ÿÃ/÷ïþû9+Ú¶Q6U— Ôt¢åãbò¬¼aÏøÈ ˆÄH^x°×¿ïË~)Nw??}zÄFÏm˜q€˜;ãNÛ¾{þüîés^) ð8ã¹ÿø£fi­Q\æ0–çÏOï¢ò»Øë§¶ÕÚˆ6ˆMkE(wŠÂ!ôÖyŽâQòäÈÌäžÝ kã‰È³4LZ(غÁxVX!Ç´9‰Ë,óÛ ä®ûFGu[´‰²H›óhšnwªAúšÌxûvC=¼8>ØÓu3µÇ÷{³2݆ ;‘gQpɰKZÓ¯þË–|}Re…Lžïž¼W÷œM†ú/Ž}f£W±ùrŽüaÁ‘•d+8Ö½ùmºªœg ]v–ˆ/7åËÄ— Š¢ï‡—áuL]U@ fì0Šþ^`n%À\WÀ„ÍJæ^"ÌèfÔ³7ªj ) ¢¡ i9üœL@ C¢ ß„(+0\{—@óŠ{ËìP-³SsƒÈ[N7Ý8’A\ÏÝMÛÁ6vz«ªp°IÛ=¡Ýh°²v| Xé³a¤ÜCha=>f&½yl¯Xm3Èêš;`Æ!Ú%s0zn»Næ9O&[-j×;,àˆÆiúL&±ê¨Â$ºíIU>%‡ÈÇàÿQ£™n¦–áõxSw­1ä*º¹ À°~Æ}7X@£võMÝwCæb軉`²¼£VÕ|3Zl0|¸E³N«öfd!ZU´Ä­Ù؃© ëÒ Cƒ±¡ɨ`åŒ-,@°„;,péwºœö‹ñ†ž—ƒvU%]Úhë9ÀlVõ<û¡ŸlîÖŠ¨æ Ø%¥SúPr„±Õ=sC`4B×c-1=|¦èAö(%…“â>:*ÍÂwJ[ÁEÜŽYàà4RH&z‘WÊRÎÕ]WNóLzŸÏåœ×[¦}XžwõAEꞺ+.†¹ùчe&æŒôaÒ‹†sÕc¿SnOhÀYNu@CÊ|òSØšýöÖÄ´5'Hz D6éÝÛ©<Ô:£z˜=çU4”%MI,Xârn\óHn³œ±`D?húsÆj”(3-vn"¹Íõ»«F”KÄ9w aF‹ò:¦±Á1­Vå˜6œe–EÌ4ØW3-X(Ól#{á ÓÐ,ô⠦9¦$æÁÍ”G+€1 „Ê2팕‡ìQÝ <[ «˜±×øÖ†Á øñç‚ `é—2.­—(¢z‰‹,=M¿Øn& Ïo·”sPâ²Âê‚AF–žÙuˆ"ê†óF½ï8\½q¯‰[(øóo–2í¹÷ÿKNÿà q>0 ýÿ‹ƒÝЫ­ƒDmuü£¶ºÁ°+§–í\HT·Ë½Ýäö{éø° :ÓÌ\kQÌ{Ð¥ókÑötlæv,7>$aåv$fzxdÒÎ bÃ# ˆ0³Á`dõíù× µ˜¹$!Ù`­u<92˜Â0rf}’-ܷር\Ò™bäˆ 6õ ;žÌº&+RØlã è`U³‰›¸r€¨›Y‡@S„1Èî¬#¥aAÿ*,Ì` ×§ mÈ”†„Ìú4R HF†yˆý&Ì[­ÓYbúä”ÂGT:€úsbE_9Mr€bn×HeÒ)[i[a·ÉFýV¹Òc©¦°É"•b@9—ò­…vª8îr™ÙS´ð%ÙÓžšÑvo;¢(Žøôñ‡»Oßþë§÷ß¿ŠKùÈØ’Â×=_r %Ì6ocó0,V¯ŠC¬…c{Ú ÷Œ"‰~ÔºNøT¼×¿æëzeµ­ÈÝw–(w1º{±wqºfße•'$Ôeso³»¼€ÝQѩ¶|õ8c¼‰³Ó8s~ßE«ÃùkûKÖ)øŽPeö•A^¾ÜJ³ÌqqZ-'—S'ðwßé°lžN£¶ý`+zoß).gÇšA†Í‡ëýùG^hå_{ƒa±}WzQ–µpl´ïŠÌQ ”¶“–×§Ûn¥î¢"Yöx“Ôš]¸7ÖÂöàVK¡< £ LTîÂ"àˆ$ü*Ì šb“PnåÛ²ŒJìtý£òÚÆrñ¡Ž¤üƒ‡‘3Ëáà¥ÅØ;óDrõý{\V…/ºlM]dª#&Üä‹l32ß×Ú­rÊçßuuïÛƒC„#¥´I‰«_qZ/¾„뛄J_ÇÏ%“ __|^™é?¡&ZÍ'çšÕD¯Êˆ·)r`íEÆX¼ö,²bÛãˆ~‰Pù n„§X ·—w,}í%…š¾V­aßó{ŒO9èý%ïþ½Œ7à‹Ç|ãºašô¢=Å)ÊŽÎrÖvª%tô¿¯ù_Ä+D¡Ø†Néþ=§°Ÿöâl52¢= ±â€Y‘6ö.,ªu€w9Úz®q^âè=—Tn±çjBXOÀè RLè@û´©8m0V%‰Ê‘$ÑHÅu’$jZ… (Ò$JK%I4̺¡C£Î’DŽl˜’$‘õ žY’ˆ@œ$fŠ’I%åà!: ¤I"*¢¢$рdzzF¤ …P(¨¦Ž“DñW€q*&BucCÀÊo$!d#¥}‰As’ˆðkÚKw8 B¦5ÚÄÈŒ†@FC£>Ôâ‘4DX$â H“Da–´K•ÓÁ!èÇÄŠ¾ršFÈnëºX§A€Àõ!&OÓ-( ±Q•Ÿ"¶S½GÔ¢JÀ¨ÚDjÂŒd—íèžôöÌ,ª°Lå`Œ8ç0µ-¢ùš2,G”¦)DR†¡‰¥ Ò!%¨)C ‰ÔÆú]3„ú [ÔKÀÉݪI âšÛ¤ìbswu·Nàö!_k¨‘†dÿ˜h)þ1?±Ì¿ÉóÃ×”H9·‰ä—å‡cnOäiêü±¼ ’.à6I8MA3·aQ·ÅS±Æ¡Qˆ:ÈãhMÌA¹éjÿŽ(+·“w8Ìj;„ï–ÅÅ™jãuñvÏåaj™3 2ÀR_:È@ÝcÜ Œ í‚3ðE04S™0¥=.–dÂå¦JXEì O»ƒL]ÁsWßÝ!žpŽ‚8`³¾‡örB)}w‡Ö¾7‡×ÞqŒ‰M}ïOhïÞ^Æð-ÆŸ8È`eê O°ó8ÈtÚ;q‹…(¸ uWí€ÈpXâÎÓ‰Rw·³.zéβØk¶¾Oq¯í¼†™EU”æÜa‚„3™a¨£ÃBì)bÅFÜtdævÒ‡Úgä(v @©ƒ<@(-dPá Ã1é—2íIÀ™@‰ƒÜCèˆ3\ù"já 6‘ÁA޹ƒìÈ"ZŸFêxdÁ‡õ D®n˜¥î’@0SÙiåm`FZعO÷\Puß– Å& ;ÈlÂàILq‹ùWr£#zÀx¹s¥Fš¥ˆ«úMÏžr&ÌÒÛ‚.:l¤JMMó¶Š`¨‡Ì óÝ"1ÙL˜å;ü5enø` ¥{È¿ÒôØPóYæU·ÌÙ_[ƒ/ÂX\#‹ýµ|ðæÃÉà-ª°^qb¨_qg²+‹Ų̀æš4ÄӞwï󱜠³ÅÁ >ãS&ñH‹Ð.xŸ_C,x¤¡…c·ÍÑÈ8ÖAðd¯¾smž÷Hýn£‹µHcO¡ú)"¾ @ºDl”V¸÷I¬Ì+tìátÒQäÈ#õvæ}‚„Žok"ÔZÀss?6Zu«@àqºs±ñλ{é£PH¾ž8;i2l}ÿgðQ4v¶#Îá‘Rb¬Æ!ÎáñÅ;ùH0ýÊOÑ4ó±3ÌuGklN3sH‹Ü˜üu¯ Íæ£ñQìºW [ß#ËÑ3MÑ5`&¬\D<-‹Çár¬OôÕ3çê‚€:ßDÑ2úeõΡz‰xJ/Œˆæs·jÅn°› ôw]R7&˜ˆ7áhô~I=´ÿÅ·:z¶Úóî^¥ô…u-aÄEZw Ž¥åë¢Ï{ÅkZ‡õ7)l FvìÃQOÓ-Jü"Z×;§¼~ålAËÙ/ªèX_ãwy§íõD·LÕ1©è8T1x¶¢gf;÷³Yѱ,Ý ·Üe+:bŒ v2y–w³©èHKm|Õâ¦ã¥Þ<_ÑÁEçamp(bi†3A3ky"m€'¹ú~íèÜ[¤ .>kÙ%Q+½Œ6 #|C`4r@Ú0oö†½i ÛÐz¾…S‰ài=åÐ"-!¢Üšà\¥æ¿Â1oȵtÞ “4 ©û` BÄ¥.ÙÊ@^‡¬jWÙrmÉ4µš=çé08tÐblQìCø€MÖ®Óos|1 —(€xfÜB{\®‰Ð<}œdDÅl+a²â#ƒ}‰ëƉ¢TÓÁúNYyG)Þá4HÝð;Feïò=½'ßë;îaYûÕ;1ŒðYÊ@·ïéˆ#õŸ¼[ÿ‹šŽLÈ ç(ËÖu4‚ìäñ¿qMÇu!+¢k€^΢¨gd,ª³i¬ Y5äS1A‹ú =øKµ²j±–½¦Ãa¨ýÀÁ_Ú|(áàU;aCƒ—MëP¡ 2l«é°>)fƒ¿„ YÑéKÄ’@…!×t` ¦£ty¢†CV.5Ýmc_™Ÿ²Rä´g¢U†@&(‡§Ú0Rªß:¤6Ùá4‘cQ#§M@hè}*©#ƒÇ*5ÔJ&ÀN,ü ³41‡#¬BXá«@SGN ·×„>ù8tÛ³ø8ôDr€n gVÒ¯ôûÞù¬ÛŽ+k5RY‹Õ®òYúxÌ5=‘†r“°C…Ù"˜Û"Ì!Ž¢9 ûÊ9((±`%¡Ú'´O_ kù3±E¬ –S°OQ"™ŸŒ`6Bºíü¥5_cW­¦Op¤®'¢­ÊÞÒÍ"Ç3uQùã…'ô[Ü=ÃÆ# m5[俉a¸±Oa¨Í@p„†”1ÌÚÁb 0ÇÁà4Ðg°u¾zP×zù„aG,`è’± f$ÿͤLX¥§ë»åO¶ß@›ôË¢hý”ˇž…¤¦ü>ÅÓN¤'Žñ¯I æœæ¾Hyû"1ÎLW„Ñ‚ãD«^=²8×ïa4Ïõ“i@^çú%ŒæëKÃhšëOß=jf¹þ‡Tº…m–õ¿Ï†Ñ.ô“Øââ'càüDüÆûÉükâ'c¤çø½¦®›TЄŠÃ]ſʂ‘ui&Å—:Ê#2 \ÛáŽòˆú…ˆš˜£,ÃP;xÿ(yŽrø@µUÀùŽr›~RG¹‡Ö`å9Ê=] JÊ)r”C»à|¬ÇŸÎqG9´È9ʰ•Ô‹‘‡8Êaé᪠#8ï*»*ÐAÌF!Vø*Ð4 O¹½v¹ؽd¨ˆ£LÆ‹8ÊüÄŽ2ÿš8Ê8‚p¹sµv…£œ˜1/æ)»".+YrجÖÌç MÌçr«Äͼö#ÏíÈàQÝA]#ö±?øà0†’Ác~]Àî;ëæ¯mœÅšÃ_ǤàLfÍEn>pç×öàÂ/¥ÒGVýî%Ruoxl¿à9N0f¿ÕÖ.ø _C~žÜYqsB ÇE˜°éÏO¤XLbå—Â.\{¨0ÊÅFˆüÒ——ŸõK=y±þYf©^¨ºCª”ª;ì’öà—Ž½]ÒKBÏ„vÁqµ6&"_u„³üRk`«cŠ «àºb8“c˜Ú÷ÃfxVïìZºë¯¿ÛìåK¯¿ÛDüâ×ßíô”^§×ìeþÖÍ&¢_c@Y]ÔÂpÞe}iÞíÓo¸0—,ÞÄŒ£»ã¹Ûù²7æE¡Š]H؃ÿy Ëà$"Xåî~“€ý7¾0o±ôàUwûûFëþúËÎèî4MÔG©{µÜ]–Zåƒçðý²³¤F ýؾqóßþLT±êÀk]Þk‘aIú‰þʲµØ© Ùú«ËtEVKNPÁ$HKttµð½\è£÷£mofRòZ!a4iÈXTÚ”.šô& Û‘;•ôî¸ÕE)$ Zhœ½Øðˈôl//!Ò³ˆÿ&"}£§ËDzÉ‹ˆô,æµHß×8Y$4<¾K5Ö8KEð;ùûf¿ÛT8YÄtž§«¥ƒ?R—G¥ÑâÆ†Eña¢4ŠïþÅ¡b[ endstream endobj 1 0 obj << /Type /Page /Parent 2 0 R /Resources 4 0 R /Contents 3 0 R /MediaBox [0 0 1321 1312] >> endobj 4 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /Font << /TT1 8 0 R /TT2 9 0 R /TT3 34 0 R /TT4 85 0 R >> /XObject << /Fm1 6 0 R /Fm2 10 0 R /Fm3 12 0 R /Fm4 14 0 R /Fm5 16 0 R /Fm6 18 0 R /Fm7 20 0 R /Fm8 22 0 R /Fm9 24 0 R /Fm10 26 0 R /Fm11 28 0 R /Fm12 30 0 R /Fm13 32 0 R /Fm14 35 0 R /Fm15 37 0 R /Fm16 39 0 R /Fm17 41 0 R /Fm18 43 0 R /Fm19 45 0 R /Fm20 47 0 R /Fm21 49 0 R /Fm22 51 0 R /Fm23 53 0 R /Fm24 55 0 R /Fm25 57 0 R /Fm26 59 0 R /Fm27 61 0 R /Fm28 63 0 R /Fm29 65 0 R /Fm30 67 0 R /Fm31 69 0 R /Fm32 71 0 R /Fm33 73 0 R /Fm34 75 0 R /Fm35 77 0 R /Fm36 79 0 R /Fm37 81 0 R /Fm38 83 0 R >> >> endobj 6 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [233 802 429 831] /Resources 7 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 142 >> stream x-A Â@ ï}Å|@M²»Ýõܳ‡Òƒ(J…­P{ðû†­„À$d²1²aQ)*hñ |Üy#çž—aWæÝ«”“•Ü;åTúìtMj"Æ>w…b‘•hÖ¨$WªŸði£…'/‰Û±|˜Óà.Ú𤇔…n^[gmvâ«þ–ÕÛ.[Y˜ü‹ñ3¢*• endstream endobj 7 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 10 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [232 974 428 1003] /Resources 11 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 141 >> stream x-;ƒ@ {N1Hbﲿš:¢ÈP""-‘×µDnÆÏÒÓxcdÃõBÉÍ‚z¾O|käÍmØ•y·-¤àrŠFÉ•˜ŒJP'âØçÎùB)‘•Þi£zRV*íÚhá…ç p?ˇ i3 æ¢ /zJ•ÐÍkKÖf'Võ·¬›lea²/ÆKù*Ë endstream endobj 11 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 12 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [169 970 208 1006] /Resources 13 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 166 >> stream x=±Â0 D÷~ÅýÁIœ8™33Tø€ T¤©tà÷q]Te¹Ó‹ïì=VxT)ŒàñyàŽ7Èe¼pm›Ç¸©«Ì™Aú¶Qg2<aA `²›MVM›jÂ_$ÜŽ¸6Xah{¹™‹?¶¨Å±ˆtã‚ärоˆòE¡‹œ$ªÑ–è8P.ÚjMvwN™#TWˆse]îDû¿ ƒÞÞÿo 5‘ endstream endobj 13 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 14 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [313 1150 352 1186] /Resources 15 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 166 >> stream xM½Â0 „÷>ŽÁŽŸÎ™ª<@*R‹T:ðú8ÊòÎwv6 Ø žÁ2¼ÂðqÁw‹¸áXvÆ´›êU“FÙÛ' ‘…2a…hì.kU‚ah8ã Á§wa[ a,¶Ÿ›8ð甦ÜM+‚‹A8'óWpr¢!‰‰^œzŠ\Õײ•Ë/Õ¡w™4öÚýYunÆhß^ê¿5÷ endstream endobj 15 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 16 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [233 884 429 913] /Resources 17 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 144 >> stream x-;Â@ Dûœb.ØÞõ~ê­)¢`)A )r}ƒÜ> >> endobj 20 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [230 1224 426 1253] /Resources 21 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 145 >> stream x-1Â@ û¼b>ؾÜ]¨SSD)x@ Ò)¤àû˜Käf¼²v×++:Ô‚¡ Ïƒ;oäœxqé7eÚ|‹9Z—“SQ%e§kT1¶©±Ý¥M,´zݱ”â1ÿƒŠ3O_"·= ‘:cÏÚhÅ“ÍÚÈ´Ti©ÅÍŽªÅeo\˜ý—á.»+Á endstream endobj 21 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 22 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [230 1224 426 1253] /Resources 23 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 145 >> stream x-1Â@ û¼b>ؾÜ]¨SSD)x@ Ò)¤àû˜Käf¼²v×++:Ô‚¡ Ïƒ;oäœxqé7eÚ|‹9Z—“SQ%e§kT1¶©±Ý¥M,´zݱ”â1ÿƒŠ3O_"·= ‘:cÏÚhÅ“ÍÚÈ´Ti©ÅÍŽªÅeo\˜ý—á.»+Á endstream endobj 23 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 24 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [452 880 491 916] /Resources 25 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 166 >> stream xE±Â0 D÷~ÅýÁIœØ™;3Tø€ T¤©tà÷qR©ÈË=]|çl°3AUÁãóÀoËxáÚïÓnT˜…3ƒlö œ Š'¬`MUuKSªSæjÆ_$ÜŽ°~l„±·jßàâÛ …Ô±ˆtÓŠärŠÞÂj…9I4X¢ã@YaíËß •έF„â”8¶ãN«¾›1Úχ$¨5R endstream endobj 25 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 26 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [345 799 384 835] /Resources 27 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 164 >> stream x==ƒ0 …÷žâ] ©c;q˜™; †µ¢T¢ ½~ !/ïÓóÏó†$ XÁß'ø€BÆ·~˜v§NÕ4+ÈkŸ|†Q¸Ã ±RÕe9e¸ªnS3^üp?–õc[A{?\ã‘-¨™]¦)ä$±˜û+¢Ñdâ°€%(S.ˆ•N‹+S](¤¹SwZµoÆèŸí5= endstream endobj 27 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 28 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [227 480 423 509] /Resources 29 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 143 >> stream x-11 û{Å~°“8 ujŠS @JŽ|ŸAnÆ[¬ÇVlp^rg{¼o¸â:F> >> endobj 30 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [226 652 422 681] /Resources 31 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 143 >> stream x-1 Ã0 E÷œâ_ ­dYv2{î<ô¦%»fÈõ+ì"OHO;VìpâgKÁ÷‰> kÀ·t0Êa•Fus FQ”)D£EÙ9er"Ñ£Á³vªƒtAµ6í´áÁ Å},OÔ#'sáŽRQ¦Òz§u;²UËjm“­Øí‹õ@»*³ endstream endobj 31 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 32 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [163 648 202 684] /Resources 33 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 163 >> stream x=1ƒ0 EwNñ/Ð4N;™™; †µ¢T¢ \¿N—ÿôm{À ¤I‚À„ß O|áàƒ{¿¦Ý¨0+ Ã[í“Íxˆf¬ "UuË©R‚©ê65㈠sY?¶c_£Üè¼AűªvÓŠä$EÊj¾E¨‹œ4,Ñqð’A•.+Tº¦y—=Ka;î²jߌÑ>þ·5= endstream endobj 33 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 35 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [227 562 423 591] /Resources 36 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 142 >> stream x-A Â@ ï}Å|@Mv›Ýõܳ‡Òƒ(J…­P{ðû†­„À$d²1²¢aYÐâù<¸óFΉ—aWæÝ+ËJNN9šJÊNWÓ Øç.Ä+=+½¦Fõ t¥ú Ÿ6ZxùbÜŽåÄ´˜wц'=¤JìæµuÖf'¾êoY½í²•…É¿Cb*¹ endstream endobj 36 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 37 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [227 562 423 591] /Resources 38 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 142 >> stream x-A Â@ ï}Å|@Mv›Ýõܳ‡Òƒ(J…­P{ðû†­„À$d²1²¢aYÐâù<¸óFΉ—aWæÝ+ËJNN9šJÊNWÓ Øç.Ä+=+½¦Fõ t¥ú Ÿ6ZxùbÜŽåÄ´˜wц'=¤JìæµuÖf'¾êoY½í²•…É¿Cb*¹ endstream endobj 38 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 39 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [446 558 485 594] /Resources 40 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 163 >> stream x=;ƒ0D{N1ˆãÏ~ìš:¢ÈP""A$BÁõ³6Úfžf?³l &°"!ü^xâ ïÜû=`Ú ‘’¼Õ>ÙL猤¥ªn9•0LU·©o$`<ÎeýØVxŒ½ náÌÅ‘ªvÓ vÂ)d5EP—ˆ5,ˆÉQô’*]V¬tM5ò(.{’Bî²jߌÑ>þ%±5U endstream endobj 40 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 41 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [339 477 378 513] /Resources 42 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 165 >> stream x==ƒ0 …÷žâ] ©Ûq˜™; †µ¢T¢ ½~ !/ïÓóÏó†X RI"¾O<ð…Œ7ný1íNˆI×>ùL†’a[ªê²4%EàÊÝCÍxñƒâ~,ëǶ‚0ö~:6¸Æ–AIƒ˜ÙeZ¡!+ÇbXÔØaAâ ‰rA¬tZ©Ò9ՈЅB’;ñp§UûfŒþùð 5. endstream endobj 42 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 43 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [612 480 808 509] /Resources 44 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 141 >> stream x-;Â@ ûœb.Ø›ì'ujŠ(ˆ@AÚ …\ã 7ãgéi¼1²‘‚Е‚A[Þwn¼sâÉeØ•y·-æJNF¹*)õQƒH`Ÿ›¤=Ñp¥ˆ:U§®d*¿ëA Z>D®Gù0!>Ó`.êxR—Š¢Í¼z²ºXÕß²Zl²•…ɾ¿@S*§ endstream endobj 44 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 45 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [611 652 807 681] /Resources 46 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 142 >> stream x-A Â@ ï}Å|@Mºnv{Þ³‡Òƒ(J…­P{ðû†­„À$d²1²a:`&hö |Üy#gãÅ¥ìʼ{Sìs2§¢Š%§!j/Ò³ÏiÆÒ••,Ò¨ªŸði£…'/‘Û±¼LH‹©¸‹6<é!•B7¯­³6;ñUËêm—­,LþÅøKÎ*Ë endstream endobj 46 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 47 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [548 648 587 684] /Resources 48 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 165 >> stream xE1 Ã0 E÷œâ_ ®eË’3{î2ô¡%…¤fèõ+;" ÿù£/iÀ ) Ä^`Âç;ÞðNðµì„i7ꙕ…á­öÉzD3V¤LUuË¡ìßTu›šñDÄ ·#¬Œ-Âc,6š\èØAűªv“¥:I‘²š¿‚ÔEN „è8xÉ J§*]ü%Ë5U endstream endobj 48 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 49 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [612 562 808 591] /Resources 50 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 141 >> stream x-A Â@ E÷=Å»€šÌ˜™éºk¥ P” S¡váõ S —/#)–-ޑσ;oäœxqveÞ}²l¡ä䔣©¤ìÔ›‘À>wI{¬\Y)¢êA©§Ò¶žD¾·ãø0!­¦Á]´áI©»ymÉÚìÄOý-«Ç.[Y˜ü‹ñEþ*¿ endstream endobj 50 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 51 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [612 562 808 591] /Resources 52 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 141 >> stream x-A Â@ E÷=Å»€šÌ˜™éºk¥ P” S¡váõ S —/#)–-ޑσ;oäœxqveÞ}²l¡ä䔣©¤ìÔ›‘À>wI{¬\Y)¢êA©§Ò¶žD¾·ãø0!­¦Á]´áI©»ymÉÚìÄOý-«Ç.[Y˜ü‹ñEþ*¿ endstream endobj 52 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 53 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [831 558 870 594] /Resources 54 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 164 >> stream x=;ƒ@ D{N1Èf?^Û[S§@9JD$ˆD(¸~¼‹„ÜÌóø»aÀM™‘~/<ñ…wŒîý0íF…Hˆ ÞbŸ¬G‘U±B-iª[NŦªÛÔŒ7d<ÎaýØFxŒ½­ ná¼AÙ‘ˆtÓŠì8§ bþŠ .Q–d° &Gѳ"Tº¬XéêjäQœzâBvÜeÕº£}>ü6Å5m endstream endobj 54 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 55 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [724 477 763 513] /Resources 56 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 165 >> stream x==ƒ0 …÷žâ] ©Øq˜™; †µ¢T¢ ½~ !/ïÓóÏó†,EHQDAd|Ÿxà oÜú1íNˆI×>ù CɰÂÔªº,MI¸r÷P3^HøAq?–õc[A{?Í ®Ü2(i3»L+4dM\Ìýl!‰ZrXSH¹€+V¬tN5"t¡äN<ÜiÕ¾£>ü|54 endstream endobj 56 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 57 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [226 166 422 195] /Resources 58 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 142 >> stream x-A! E÷sе¥Å5k€hÆLF^ß !yý$¿8YÁj7XðyàŽ7èðÂ%uFé6yõ.j0RñLA®ž‘C/‹±‚ˆ†•ý :IÕVØë O¾ð¸Íò”Aãäd.<ðÄS*êRÚHÚ°#«ú[V‹M¶bG¶_l?9µ*¡ endstream endobj 58 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 59 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [225 338 421 367] /Resources 60 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 142 >> stream x-;Â@ ûœb.Øëý„:5E”‚D  mB ®µAnƶô<ÞÙfXÌh/¨ñypçœ3/.î̻w©¤Ð—ìT,©äâtMDûÜ XV¢ÆFõ ˜¨~·ž_·#|˜VÓà.Úð¤‡TºvóÚ&k³ú[V»leaò/Æ1k* endstream endobj 60 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 61 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [162 334 201 370] /Resources 62 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 163 >> stream x=1Â0 EwNñ/@ˆÇnæÎ UPŠÔ"•\;•*/ÿéÛþö†H#2'$F"|ŸxàƒoÜú0íF•YYÑjŸ@R‘ WP-®.Ë¡˜`Êݦf¼ñCÁýXÖmEÄØ{tƒ+7H ¬ª—iE R2uj¾EhÈ\4,H9pŠÒœN+9S"jè"KõãNËûfŒöùðûÚ5 endstream endobj 62 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 63 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [226 248 422 277] /Resources 64 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 142 >> stream x-1ƒ0 EwNñ.ÐÖNp3sÄРVT •(ׯ*/϶ôý¼1²bK°„v‚F¾O|kâÍmØ•y÷β….'§M%e§Þ4ˆö¹ 1²°ÒªU*'™Qü„o+-¼ˆ÷3|˜ZÓà.Zñ¢§Tê›y­“µÚ‰Gý-‹]¶°0ùã4*• endstream endobj 64 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 65 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [226 248 422 277] /Resources 66 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 142 >> stream x-1ƒ0 EwNñ.ÐÖNp3sÄРVT •(ׯ*/϶ôý¼1²bK°„v‚F¾O|kâÍmØ•y÷β….'§M%e§Þ4ˆö¹ 1²°ÒªU*'™Qü„o+-¼ˆ÷3|˜ZÓà.Zñ¢§Tê›y­“µÚ‰Gý-‹]¶°0ùã4*• endstream endobj 66 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 67 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [445 244 484 280] /Resources 68 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 163 >> stream x==ƒ0 …÷žâ] iìØq˜™; †µ¢T¢ ½~ !/ïÓóÏó†DX,`Â÷‰>ˆ!ã[¿¦Ý©1É‚èµO>ãý&X!Vªº,‡R‚«ê65ã…„÷cY?¶cï§©Á•Ž ÆAÌì2­Ð5Q1÷W…$jÉa§ sU:-®tN5ŠèB‰’»î´jߌÑ?þ=5 endstream endobj 68 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 69 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [338 163 377 199] /Resources 70 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 164 >> stream x=±Â0 Dw¾â~€`ÇNÜ̪|@*R‹T:ðû8©Ty¹§ó]œ 6ˆf°1¢"2¾O<ð…Œ7nýΘv§¢jšä³OžIà"X!žtuYeWÕmjÆ ‚îGY?¶ ÂØûÓÜàÊÇ …ƒšÙeZ‘BN¹¿zUðF‡Q‚FʸÒiÅJgª¡„Ž4õãN«îÍýçÃ÷°5 endstream endobj 70 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 71 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [611 166 807 195] /Resources 72 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 141 >> stream x-11 û{Å~°ûêÔ§< R‚t¤àûX r3^K«ñ "¯`¹‚•ÀŸîxƒÎ/\Rg”n[àT¢‘øÀÅh ìˆzY"«(”¬Æ¨No4®ƒv<áñEÀm–§ ““¹ðÀO)•¥´‘´aGVõ·¬›lÅŽl_l?DÈ*¹ endstream endobj 72 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 73 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [610 338 806 367] /Resources 74 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 142 >> stream x-1ƒ0 EwNñ.ÐÖ&8!3sÄРVT •(ׯ*/϶ôý¼1²µ'tí |Ÿ<ø ×ț۰+óî%kûR0•˜œ²i+Ò²ÏMÔDˆÂJʹR9©3ŠŸðm¥…ã~†RkÜE+^ô”²ÜÌk¬ÕN<êoY|ì²……É¿L(*Ë endstream endobj 74 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 75 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [547 334 586 370] /Resources 76 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 163 >> stream xE; Ã@ D{Ÿb.Íê³×[§0.r“à€p\äúÑ®ÁAÍ<Fl!@”Á &|¸ã ï"^¸–0íF½jÒ¨ð6ûd; 1\²¯ª[¥SÕmjÆ‚/nGX[„ÇXì45¸ÐÑ!²Ó”R7Yª‹A('óWPr¢!‰Á§ìcU:-®tn5òè]öûVî¸`ÆhŸ?W5 endstream endobj 76 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 77 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [611 248 807 277] /Resources 78 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 141 >> stream x-1Â0 EwNñ.Ø©ì¤sg†ª¨@EJ‘J®•"/϶ôý¼1²áÚ“ÌÑ"hÇçÁ7rq^\‡]™÷è,[*Ùƒrg*žƒzÓ$’Øç“k!ea¥ˆ4ª™QãDl-<éøbÜŽðaBZMC¸hóRÞŸæµMÖf'õ·¬1ÙÊÂ_Œ??%*­ endstream endobj 78 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 79 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [611 248 807 277] /Resources 80 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 141 >> stream x-1Â0 EwNñ.Ø©ì¤sg†ª¨@EJ‘J®•"/϶ôý¼1²áÚ“ÌÑ"hÇçÁ7rq^\‡]™÷è,[*Ùƒrg*žƒzÓ$’Øç“k!ea¥ˆ4ª™QãDl-<éøbÜŽðaBZMC¸hóRÞŸæµMÖf'õ·¬1ÙÊÂ_Œ??%*­ endstream endobj 80 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 81 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [830 244 869 280] /Resources 82 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 163 >> stream x=;Â0D{N1Àx?ö:ujŠ(ˆ@AJB ®ÏÚ‘¢mæiö3»aÀ†"œ¬`Â÷‰>ˆ!ã[¿¦Ý©S5ÍŠèµO>c`S¬(Yªº,‡JWÕmjÆ ‚îDz~l+"ÆÞOSƒ+ŒƒšÙeZ‘BNBÅÜ_AD“‰Ã– sU:-®tN5ŠèB‰š»î´jߌÑ?þQ57 endstream endobj 82 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 83 0 obj << /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [723 163 762 199] /Resources 84 0 R /Group << /S /Transparency /CS 86 0 R /I true /K false >> /Length 164 >> stream x=1Â0 EwNñ/@°c'næÎ UPŠÔ"•\'•*/ÿéÛßö†LlŒ¨ˆŒï|@!ã[¿3¦Ý©¨šfyí“ϸVXÊU]–CÁUu›šñ‚à‡„ûÖ-‚0ö¾š\ù¸¡pP3»L+RÈI¸3÷W ¢ÉÄaA” ‘r®tZ±Ò9ÕˆPBGš‹úq§UûfŒþùðü 5 endstream endobj 84 0 obj << /ProcSet [ /PDF ] /ColorSpace << /Cs1 5 0 R >> >> endobj 87 0 obj << /N 3 /Alternate /DeviceRGB /Length 2612 /Filter /FlateDecode >> stream x–wTSهϽ7½Ð" %ôz Ò;HQ‰I€P†„&vDF)VdTÀG‡"cE ƒ‚b× òPÆÁQDEåÝŒk ï­5óÞšýÇYßÙç·×Ùgï}׺Pü‚ÂtX€4¡XîëÁ\ËÄ÷XÀáffGøDÔü½=™™¨HƳöî.€d»Û,¿P&sÖÿ‘"7C$ EÕ6<~&å”S³Å2ÿÊô•)2†12¡ ¢¬"ãįlö§æ+»É˜—&ä¡Yμ4žŒ»PÞš%ᣌ¡\˜%àg£|e½TIšå÷(ÓÓøœL0™_Ìç&¡l‰2Eî‰ò”Ä9¼r‹ù9hžx¦g䊉Ib¦טiåèÈfúñ³Sùb1+”ÃMáˆxLÏô´ Ž0€¯o–E%Ym™h‘í­ííYÖæhù¿Ùß~Sý=ÈzûUñ&ìÏžAŒžYßlì¬/½ö$Z›³¾•U´m@åá¬Oï ò´Þœó†l^’Äâ ' ‹ììlsŸk.+è7ûŸ‚oÊ¿†9÷™ËîûV;¦?#I3eE妧¦KDÌÌ —Ïdý÷ÿãÀ9iÍÉÃ,œŸÀñ…èUQè” „‰h»…Ø A1ØvƒjpÔzÐN‚6p\WÀ p €G@ †ÁK0Þi‚ð¢Aª¤™BÖZyCAP8ÅC‰’@ùÐ&¨*ƒª¡CP=ô#tº]ƒú Ð 4ý}„˜Óa ض€Ù°;GÂËàDxœÀÛáJ¸>·Âáð,…_“@ÈÑFXñDBX$!k‘"¤©Eš¤¹H‘q䇡a˜Æã‡YŒábVaÖbJ0Õ˜c˜VLæ6f3ù‚¥bÕ±¦X'¬?v 6›-ÄV``[°—±Øaì;ÇÀâp~¸\2n5®·׌»€ëà á&ñx¼*Þï‚Ásðb|!¾ ߯¿' Zk‚!– $l$Tçý„Â4Q¨Ot"†yÄ\b)±ŽØA¼I&N“I†$R$)™´TIj"]&=&½!“É:dGrY@^O®$Ÿ _%’?P”(&OJEBÙN9J¹@y@yC¥R ¨nÔXª˜ºZO½D}J}/G“3—ó—ãÉ­“«‘k•ë—{%O”×—w—_.Ÿ'_!Jþ¦ü¸QÁ@ÁS£°V¡Fá´Â=…IEš¢•bˆbšb‰bƒâ5ÅQ%¼’’·O©@é°Ò%¥!BÓ¥yÒ¸´M´:ÚeÚ0G7¤ûÓ“éÅôè½ô e%e[å(ååå³ÊRÂ0`ø3R¥Œ“Œ»Œó4æ¹ÏãÏÛ6¯i^ÿ¼)•ù*n*|•"•f••ªLUoÕÕªmªOÔ0j&jajÙjûÕ.«Ï§ÏwžÏ_4ÿäü‡ê°º‰z¸újõÃê=ꓚ¾U—4Æ5šnšÉšåšç4Ç´hZ µZåZçµ^0•™îÌTf%³‹9¡­®í§-Ñ>¤Ý«=­c¨³Xg£N³Î]’.[7A·\·SwBOK/X/_¯Qï¡>QŸ­Ÿ¤¿G¿[ÊÀÐ Ú`‹A›Á¨¡Š¡¿aža£ác#ª‘«Ñ*£Z£;Æ8c¶qŠñ>ã[&°‰I’IÉMSØÔÞT`ºÏ´Ï kæh&4«5»Ç¢°ÜYY¬FÖ 9Ã<È|£y›ù+ =‹X‹Ý_,í,S-ë,Y)YXm´ê°úÃÚÄšk]c}džjãc³Î¦Ýæµ­©-ßv¿í};š]°Ý»N»Ïöö"û&û1=‡x‡½÷Øtv(»„}Õëèá¸ÎñŒã'{'±ÓI§ßYÎ)ΠΣ ðÔ-rÑqá¸r‘.d.Œ_xp¡ÔUÛ•ãZëúÌM×çvÄmÄÝØ=Ùý¸û+K‘G‹Ç”§“çÏ ^ˆ—¯W‘W¯·’÷bïjï§>:>‰>>¾v¾«}/øaýývúÝó×ðçú×ûO8¬ è ¤FV> 2 uÃÁÁ»‚/Ò_$\ÔBüCv…< 5 ]ús.,4¬&ìy¸Ux~xw-bEDCÄ»HÈÒÈG‹KwFÉGÅEÕGME{E—EK—X,Y³äFŒZŒ ¦={$vr©÷ÒÝK‡ãìâ ãî.3\–³ìÚrµå©ËÏ®_ÁYq*ßÿ‰©åL®ô_¹wåד»‡û’çÆ+çñ]øeü‘—„²„ÑD—Ä]‰cI®IIãOAµàu²_òä©””£)3©Ñ©Íi„´ø´ÓB%aа+]3='½/Ã4£0CºÊiÕîU¢@Ñ‘L(sYf»˜ŽþLõHŒ$›%ƒY ³j²ÞgGeŸÊQÌæôäšänËÉóÉû~5f5wug¾vþ†üÁ5îk­…Ö®\Û¹Nw]Áºáõ¾ëm mHÙðËFËeßnŠÞÔQ Q°¾`h³ïæÆB¹BQá½-Î[lÅllíÝf³­jÛ—"^ÑõbËâŠâO%Ü’ëßY}WùÝÌö„í½¥ö¥ûwàvwÜÝéºóX™bY^ÙЮà]­åÌò¢ò·»Wì¾Va[q`id´2¨²½J¯jGÕ§ê¤êšæ½ê{·íÚÇÛ׿ßmÓÅ>¼È÷Pk­AmÅaÜá¬ÃÏë¢êº¿g_DíHñ‘ÏG…G¥ÇÂuÕ;Ô×7¨7”6’ƱãqÇoýàõC{«éP3£¹ø8!9ñâÇøïž <ÙyŠ}ªé'ýŸö¶ÐZŠZ¡ÖÜÖ‰¶¤6i{L{ßé€ÓÎ-?›ÿ|ôŒö™š³ÊgKϑΜ›9Ÿw~òBÆ…ñ‹‰‡:Wt>º´äÒ®°®ÞË—¯^ñ¹r©Û½ûüU—«g®9];}}½í†ýÖ»ž–_ì~iéµïm½ép³ý–ã­Ž¾}çú]û/Þöº}åŽÿ‹úî.¾{ÿ^Ü=é}ÞýÑ©^?Ìz8ýhýcìã¢' O*žª?­ýÕø×f©½ôì ×`ϳˆg†¸C/ÿ•ù¯OÃÏ©Ï+F´FêG­GÏŒùŒÝz±ôÅðËŒ—Óã…¿)þ¶÷•Ñ«Ÿ~wû½gbÉÄðkÑë™?JÞ¨¾9úÖömçdèäÓwi獵ŠÞ«¾?öý¡ûcôÇ‘éìOøO•Ÿ?w| üòx&mfæß÷„óû endstream endobj 5 0 obj [ /ICCBased 87 0 R ] endobj 88 0 obj << /N 3 /Alternate /DeviceRGB /Length 1072 /Filter /FlateDecode >> stream x…U[hUþ7svWÈ:b›šJ:xk(IÙ¤¢ µÑ½$›mãvÙ\´AÍìÙi&;ãÌlz¡øPA£‚O‚÷·BŸ„x©¶/¶ˆÒB‰ ¢àCëB¥/ÖïÌìÎî†`gÙ3ßüÿ¾ÿüßÎ QôJѲŒ.…h©êÚ…LRyþؼ]§.z€º©—º‹ªc%òù)Â%bŽóºó…„åúàöþÎè-OÝ%î¨D¡{`7KŽº|’(üšjÙ.Q”Á>rµ~ ø~ Î \ñqIàc.bf )ļ,«Zþè»À möJö×€ÌÍð*·uUZäm³¬ÜsøÃ]Üm‘ÿ—Œjö®=cÎâôÜûQû+¥bZàG€Ï©Åñé¾¶¬ÏåøËM€#êÚU[œMï+Û³ÀàéÒ´Úd¯œÖfžƒý>ØWÍ#bîNào« ¹£À‚çÕIAWzˆHŠh<+úÝÜo›ƒõH%ž>®»Ù`ä’Þq–§…Ýã9­¥Ä:‘Kúêxñ°èS/ð5ndD^Áÿ»åæyY¬jäD.ð°aîxõ‚‡Å\mfväeó.êÏe/—õ‰l#þ}Ížv1÷Šex{kc·ìZAÔŽ\áyuVhÎðXÑÏ4p‰æBEâdÒF•ª´I (CIÜ-²á)“N,^ ÇS3f°#&ïùýøf„Boæ ÌÔ‘!Õ÷ Õ0_£?Á§L ¥ðTƒ­BÛóø+¸Ùà1Y‹³ødSìa£¤°§Ù3lŒ¥aeî|[b=7‘Åçy ¹7‡Š/¡2—ŠE„INÀСÅJo­ß×è¬ý¢®^}ãÖå3_îjÅ®±Õ®Ç.ŸiÓL×bÑ©ÚÑ»iþ-|#¼†q=¼p(áŸÂø­C­V—¶ª.ú%TO &ÃëÄêÕQo«n°ƒ£Ïlåkô±Éh–«+½¾ BþjîNŽÎ´âã?ÆÿНÅ?ˆÿCz[úTº }&}.}GŠtQº$}-}#—¾â·ï¹¿w‚ž{u›¨BìÇf½íŠbÊIy·ü°œ–÷ÈÊSA”"÷ÈCò¤¼žÝAwZ»YéÐA§cЬ©Öö¹ÄÉÐ&hº}Ö[;ÎÇ,V¬Ó pÚP_ì³*Blû9kTÄúØËnÙÕ#b¯Üþyhö£©Dg <2IG¤DöEF#C‘Ã7Ïwd/|£ñÖrùI|[ˆR¦uÊÖ+š« ÇãO* |긒­ªû”¢a(žËQlîp{™—ö“øNŠyD· Þ÷/´ójËæ>KtèoñÞkÙækD碞Ç[¶~¼w¼G´ú„Z³—}> …¾'rʆ½çP,‰w×Ïõúm¼Ã¢om¾Y¯ÿûa½¾ùø7ˆ.ÿÿ%x endstream endobj 86 0 obj [ /ICCBased 88 0 R ] endobj 2 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 1 0 R ] >> endobj 89 0 obj << /Type /Catalog /Pages 2 0 R /Version /1.4 >> endobj 8 0 obj << /Type /Font /Subtype /TrueType /BaseFont /AAAAAB+ArialMT /FontDescriptor 90 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 165 /Widths [ 278 0 0 0 0 0 0 0 333 333 0 0 278 0 0 278 556 0 0 0 0 0 0 0 0 0 278 0 0 584 0 0 0 0 0 722 722 667 611 0 0 0 0 0 0 0 0 0 0 0 0 667 611 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 0 722 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350 ] >> endobj 90 0 obj << /Type /FontDescriptor /FontName /AAAAAB+ArialMT /Flags 32 /FontBBox [-665 -325 2000 1006] /ItalicAngle 0 /Ascent 905 /Descent -212 /CapHeight 716 /StemV 0 /Leading 33 /XHeight 519 /AvgWidth 441 /MaxWidth 2000 /FontFile2 91 0 R >> endobj 91 0 obj << /Length1 20800 /Length 14674 /Filter /FlateDecode >> stream xµ|y`TEºoUÓ§÷îÓKzOº“NwB:H!É@";Á ›²Ê@QÔp•Ÿ1Ž»3‚Ë(¸ M¹dÔqfTî¸Ì••QÑ1Âõ"*’î÷«êqfî}ïŸwNªê«:uêT}[}õUuV¯Z³€XH‘ˆ6oÙœD\þÓ„ÐüykWG2y«eÆÕ+®Y–É»–¢ûòš¥ë®Îäƒ-„ ™±pÁœù™<9tèBdò´iþÂe«¯ÏäýMHï[º|^ßó ù˗͹¾ïûä/ÈG®³lA¦þÔϯXÞº:“ŸÒ‰téŠU úêÓBÌÿžyvQLÇÈ0ÂD#*)!3 ‘ÊÙ¢„?×±{îýêγ³íU_‚QüÄGExE^±õÜ®ÞkTb° k$¼>¿êG¦&‘1*9·ëÜ ª(É<ê‹cûÉ ©pOÜ>zP@Ž#0i@G";¼_*²;F„µ.)ºÇ™Uj5PŠ ÅG/GØ…pA&³¥ §»%Úau”Ž2±4;Eœ$̾d=™'¬gÍQºmÔö7² á‚Äþ†û¯ì¯ävœãq5Â6„CGN!(ì8îqÀ> vö>)A¨F˜° áÂ)={±ÊþÂ9FÄ®F`ì/ˆUög ëψíì cìXº›½ÕQQYº_‰’> ë¼Á>Àé)íbìøn8*Jƒ£^’òÈHR&åuć»$_GÕ¢pûhO$Þ>j{›$zò6¾ü6‰ LAhAX zл¤ a+Âv„$¸ ±Ša¯#¼‰ð.„ !LA0°£øL;Òåa`¿%^`ü0ûHßd¯‰ô ö‘þiž¿Î^ëÈ “Qf<'xGEª"-Ásûõž|g8=ÊÁƒaÄ%Õ“f#܃ °C,¯c~؉F^"¯C†Ã¬ƒ|&Ò§É¢-kñ1`ÀâÃ/„h[d[œiñF–Gñ»ïÄ£ømwâQü† €x_ºâóâQ|Öl@<ŠOžQ{ìÅü‚pÅä%42Êή–®–®–®#2»Žßä;™÷ñÑŽ¢"`ì-1 (Üv€¶¤mÓhÛ´mm»™¶m mU´í*Ú– m!Ú–CÛ4ÚöT´Q­óGÙJÍGÛ^§m/жVÚ§m1Ú–OÛ"´Bëb¹—AêÔŠdÏ(.t,wÏ¥#¡}ì,ÍÏçB'B|!-r*Eò2•ý9<ÍÛSTÉ_2¼tù¨ñì¼ø Èð ùA^½‚F^AsvÄÕ³ºN!¤ÔÎÃ8î±q B5Âl„[N!(¢;§ÐF–#æ]Ü%:V‚¸a2ϱWpçáÎe¹Z¶RêxéžµçÐÉ9éVA<¨e§Ãàè¢Ö}ßX¿ýÆJŒ£ŒìnvÉ!¶ö¥÷t|—î¢uÄ_ Ê¢’\G+IœÆ#­"?„„ ¼¼œ„ØsHK;B3ñš½#^>@mü­}áïB'Ÿ…ºÀ“¡—ŠtÉ´#üJžÛ~;t{ø÷%]”ŒwQ$"¢êþа𠯋ªðà‘ŽðÍ<Ù¾)4.¼$$,È<¸ª9ÍžŸöjBsÃZ+ÚÜ®]®ÊÔÂßÙ„.$2`:; $>Í ÖWtÑ…Z±þ}ƒ~²~¨¾T_¬ÏÕ‡õÙú ÞmpTƒÍ`1˜ ƒb Ì@ î®ôq-Ág=·"&? M‰,`†r5ƒ˜0j`dIº¤:V7}4­KvÏ#us#ɳӣ]Ô4uVRM“Î:R7ctrX¢®KŸž–¬HÔ%õS®lØMéÝ(M²-]”Ìhè¢i^´1˜tŽiØO(ul¼+ÈÓÂw56Ÿgmµ¯Ú9ÒQ9¶æ_D-¢°¥&ñÃåûLøÙÉê¦7$ŸÍnL–r ÝX—üéôHSÃ~ú=][³ŸþOöK#éWµÓx¹4²¦±±®‹ÎõH„þêc ž3¯G"†œL½G2õbxõòy‚zF#‰‰z1£QÔ“)¯·»5¿¶fw>"ÔñFH«¨Óê\\çõêġާ¼.ê¼îiãu’#E3¡ªä B !Q%D¢ŠèùnQ¥¤¯ÊíªÜ.¾$ez#êðÍX÷×±G‹ù¿ƒ F'tψÆyMµ ¢µ-ÑÚ-É;Ö.ô%ÛæF"»ç5ò‘¤o™;o!Oç,H6FÔ$çEk"»Gˆ÷þáq<"Z³›4ÕÎhØÝ¤-¨é¡¨Î©iÜ3nJyžuû…o•OùßšÂ+çß'Þû‡oUðÇãø·*ø·*ø·ÆiãÄ·ˆàñ) » dtãЧ{˜Ù~m æ6Žö¨+F æ‘ë»9xÖÊbN4&-ÑÑI+ç룎â Sü‘ Åö¾G¾›GäÐ}T;¢£IbõšÖ5ÄW»¨&ó׊ E«×pRdâ/û—ªÔ&µ95ܶ®KM¯KVOÕ°[¯GiKM#ʆ÷—™Íµ]éîLá%(Î+JÒ…Š¼¬Š—}ÿ™DŸP ì쇡ñÒªåÐÕ¤µQJæÔÍ`P3f M³À–â“Dk#ØJ´µ¿5>“L Á°[ûÃê5}P.V÷¥¢jk‚$ZûQÒß\‚#KDW«PmºÄÐ=Cürœ`ý“þá$OS‹Ò'ùsž²Ï¡èºú!;È ty"/ÓÓxkÙO: 7jÈÏÈzrÙŒimJn'ÓpëP~õ§;±2yæãä0ê^An&ˆ‡úÒŸ‘[ÈFé-¼µ‘XIE¦åä.zyz i"Ê·’ r9¹–¬ mé†ôÝé{ÓO‘_ýÒïÒ½ÄLdîÃé/uÿ™þ ˆ7î'“齯½DÃWÚPóçdyDj–iúšô9ô —\‡>Èd"9L»Y­/ ŸR]/A+O¦“éWQ+DšÉBò9@‡Ðq,W×”ž˜>L<øÆõhõaÒAöáî"¿"ǨEw:ýTú4ñ“brÆÓIþ@»¥Tï†T5ð¦–Jy§üGýŒú*²ŒÜEž#ßP'F§Ò+éBºžn¦?¡ÓÃô(=ÉF±l ;%-”VJ¿’Gãž.·Ê·ê6éîPN¦R¯¦þ#õMº4½‰L?l@ïï'adûÉòîÉß¨Žš© w„æÒzz#î›é]ô ºƒî¤øÊQú7ú¦¤¯é÷ 3-SXÆ7¢l,ÌûØÏØÜGÙì;É+åI iˆT%5JËÑ«ÍÒVÜ{¥¿ÊùˆœžKuè¶évèžÓ½¬;­Xôÿ†9þÍóOöõ~"©-©R©Îô_IhˆÙK°*ô~îÅ ÷à¸]ä-jî´ˆŽ¤—3³ébº’^LÞF¡¿}ÿ%=,ý‰žBŸ­,$ú| ÂF³É¸¯b ØJc÷²Nö.;'é%³d—²¤"iœÔ,-VK뤤¤ô¦ô¾ô7é¬twZ6Éa9OŽË yœ<[^#?&*ªkÒ½¡ûX1)Ë”MJ—ò_°jFê§è§ê›õ÷è÷éß6´€;_!{É‹àÀ =.mj¥½änV&û±„ùøy6™/MdàT¶ƒna7ÑN–¯»^ÁFÐIä´®_cÛØY6BšHëèt²˜ Î4¨¸ågUɯù Æö´|½b¡7³SŠ…tÀFª„ôiœÞ Ǥ©^~œüY6Q/íaÏHSÀ¿’GêH®ô3òKi%½‰ìeµ„˜¾7Ü >žDŸ…^˜AKé·Rfð$pQ…ô¹•,aÿIz Ç[ȃt¾| ¹›”ÑõäSò4¤b€îZ¥HÉ¢¿g‹äv梄É;1ºJšO%›ÜF›¥G”Sì=²†‘Mäéyôþû¥4Q>­›FBn"›ÈÊô²N× ÿ‘^C$:“ÄäãÐnë¥R9é-Ð*MÐiû Ý FIQâç\¾¨‡†x÷CÐ28hdü h±?Neë"×èlZžš7RÓȬôÓäáô5äÚô½d ôÁæôz´¸ƒ|Lî!;èÆÔd–’ïA¶/×eGtcÓY;{Mgü˜¾ÀvŒúÈç¸ ʌԽDÚå?‘é¤:}gúpw!4ìÃd. Öå—øÂx©›”¥&±Ýé±Ò Œ÷C25ýL:LMdaz)™L’_èudŽ>'é1ÞÉ6-½ZZZ<Ü,hÀÖèŸÛµ1õ3FiÕ#/­1¼rXÅò²ÒÁƒJ.Xœ(PXåGór#áœìP0à÷y=Yn—Ó¡ÚmV‹Ùd4è,1JŠk£c["ÉxKRŽGÇÈóÑ9(˜sQAK2‚¢±?®“Œð÷æàÑjj¨yõ?ÔÔ25µ 5©©"U‹#µÑHòpM4ÒEgMm|WM´1’ìðDo°pn.^ˆÔúÖD’´%R›»va{mKÍÀbºÛl³À4°˜ì6™š%½Ñ»©w$óÖß͈ÁŠ!&ÑšÚ¤?ŠWÑŒ«3?9ejCmM07·q`q’Ž™›$ÜRJˆ*dŒøLR“Ô‹ÏDÁÆI’;"»‹»ÛïìRÉÜ–„e~tþœ¦†¤4mÔ& |·&é½á„ï‡,‡M¶ùâ§A©½Ö·(Â+··oŽ$·Om¸èÝ`.o¡±mà]ÛÒ>Ÿ¾”ªã¶x’mllHÒø$ ˘Uf|«7Ö²8’4FGG¶/niíI2m]nG  íO'ÚHûŒ†hn²:mœSÚí&íÓÖíñkÿŸ ,Þ­:2ˆÝm³÷ëÅÀ =óL@¢:‡ê¦]À,å}Œ^K0™AO¢Ó0-FÚç p5R¼•œŠ,JÇ´´«Ãy9†H“º˜´MÀÑž/~\2§¯D‰©_þóÉVKÒ9ýp2‘HqÑMÑÇ‘"?d`ñÚ.®P±~æ‹2¸Ó8¼èÏÍå¾£K#s‘I¶MmÈä#dn°ƒh%°­Y ÒÝÿ$«ž?iëráõ–(8¹“¯gIVÒ¿ðgW=®Ú…ÓÔó¿<^y^7=ZÓ8RÛÞÒǵu3~”Ë<çÞð¬JºÆ4HA†2± $žf,äþ*0—,I9†?E0õü.½\)JhdlRmŸ‰M¹¹}2ó{©+}š¿%’^ëFrx¢¯£™n'Gü(ÿ£îYÚ¥ºP9 –}{»éGÏÀj™^^Ö—€ã±ÐÏŒI’zHf Xr ã¡1˜Ô€2<™)ÅÁ¾ì*û^jÄŹs`ñXèÌöö±ÑÈØö–ö9]鶹шmßÏ^f/·¯¨…¶Ë0NWúÀÁäØ;±…t8ă‘Ñ»£tËÔÝÝ2}VÃ~¸8"[f4t0ÊÆ´Œnädacf4ô¡E„³>hˆp ŸãÙ³d½•äYž—[I=Òýòód•î·äj„Çt3ÉòGdÒ&¤ƒPgÂ&¬ô¦ ‹P‡w\HG#l¦¿%[ðl Ò[ؼ ¡†§øÖF<«Fý|äoEûÜA“ËcV#ègd‚]…rÇXóS¦D‹ˆÁÆç^Ã¥ÃPþùÒ‹¢Ì–Iæ©‘˜°êà{%ÿú²Â^ÿŸ.;vgÄI\°²°’ð¢¢OØ›AXœ|¿îbô5PBáÿÇ•/ÍBêacœ !z޲Ö+=.KòUº=ŠIßj˜k¬2yL_›·Y´.²~d/±¿ þƱÃy»k‰ëˬ—=3¼QCà¶À³ð€¡An`Ëuä:bˆà-#ç#R÷yMG¾'¹›Óe}j*kѽL\ª™ ìØ‚pê ªÚEËöm6RÍ¡ßf»ŠHª‘$éyÇÏïô%Գͽg{Ô³=¤ºªºjð ÚLãÌQ^1´¢LÑãÎR)ýðþ?Lœupú‚K£ šHM=H¿¥¶/õ~´±ý—~• §"?úþÍRÈ Uf4©”8¼¦mEÚ‰=¢«lÐ ªÊê|Ûi· àD§Õ*€/4»ÉÄêí¶°Ùžwöõ‘¯¶ÿ¡Ÿ®(q”Äq—y`館wM$ò.-¸aÃÁY¤¦Òãô¯÷?Ð>ëß÷û2õUÊ€^>›ú€ÞŠ5ª‰LÚkRŸSºè-N¥*ƨ‰V6€¤*¢ ÓŸ û}9¬Ñí Àvóã[gšÏœP{ªÔ*RÍcµGíí¡gåàAeCʲ܊¾`èЊ}‡§\QZ9T:|xåñ‰þ9Wr IÊ*A‰LßO¤ôîJÖ•þ@‹¸+”(“¶I»°õ´–PlfR]"&é$a'µ{!J{nÀ׫Ô3=j†R›u—$šoR_åK$²h¥;·¦üº/ΡFêÓŸÊ]7¸!›Öïf\Íh¦@ެsçX­^cWú¤À<4?G½ÑA,œÄc± ¶ð2R´Ftíî<(¸[ùç–Π%¥-} àKÍo6r•—Õbá1/»Ðämv*¿St°ˆùßa¦xœv8ŠçÊÊf¶Å¼Åþ{›Î¨7ûX­ëò¬ þ1Á®¦¬&ÿ´àýó<×Ò¬%þ–à:v²Ö|ƒ}³òþõ÷¾cì]å]óŸí o5j¹ÑòAFJŒª‘·†­ÓƒfCiÆ6#[s~{‡‹¤¢yeèC§Í+á¶Æ/ŠÐØèRCËJ='XO‰æÄ]ª§¬t¨CGóôJý’·¶¯íX=zñ[¿½î'ûw®_¿sçÍë'4³·¨L/}~öžTúX*•zå…‡^¤?O=xê4|‹¿\´‰Ón?X`üF\æ‡iTodJ•,UQE6±ªRM—¹Ç }\¹ݬop^¬ÄßàA.𣄰ÿðáÃRãáÃçŸ9|m¯¢ËÃeE´=N+Ð)TÖÃ},јÄô1YVbƒ݆%c‡t$`¤~ó|‰Iê õR2±§y%ø¾G­ߪ¬tðOÑÜ!PJCråáç‡I¿ãAºjGï£;0 ruúSÝZð}6ykï<¶8›QÎz‚8ëÍæP„”Zça¶:»Ü–½•<¢{Nú…u¿Ôiý­õ(9‘ýßÙ›3Û‘-)…Ž¢P$<Î:Ó}EÖLÿBÝ’ìw8‘¶=ÚAŸb;ïØø,PÝj@æ"ÖQX‰ovk +U;¡rЕc‘‚9²QÛ'x„R{ã5Xxo þœyM|ÄgÍ{& &öœÉpÃËG›H4s^€'zõ*r4/Ÿ )wæ—•Ê^}ÄWX–ÛÉYAî|ùÒÔ+÷¤þôè.:æå¿Ðâ‡Ê^þéΚ–}²éÉ¿16øÔ÷¿¦×þñcHèñ7n¿÷‰Ô©Ÿ¼”ú¬ý ç‚Ç ùgÁShî>ÖJ"a:ÆÊÎíàPsìÄ€.iX²áêÔhâòkô‰’®ô-‹‹1ÎV#”s‹¨v?+D_BÊ»Òç:…Ðw¥¿!…bÖLBt›sFêÙŒ»³¹ª·ªnJãað 1ë´¡RP=vydÅï ø˜b6YLV“¤dyÜ—GR‚’7—:mˆ|†P.õ˜¹ðÁŸE¸6Ðæ2Gn©ºÜ™åf6å–­:tH9t|4÷1úÝs³nn\Ý:醟Þ˜ÚM+ò‹Áµ\:é…Ô›ºYÙ—ÏMyõ™TjçœÒ†®ýìéO¾)â§ž€öäW3¹_ËRt9ƒ^O$™#ÒdÌ1ƒžsG¶ê,×Ï&DL+3¬²ñÿgyg§ûqfqe†Öš«&öV >:s"qiÎÊ’*•ã£Î‚øˆð„œþ1)qþé6ÝRÕϧ¬/p)‚(É1#¹KKˆ1Ü£§†!ü,ÝÉXÀüÿÐoÍœÑð}B˜ú§î›8É9ÿ÷½¿ÿ' d@ot½ùû¾CzÿüÇ,Ù;…÷{ø ½W£×M˜ƒþÙIJ´‚yÒ<¹UZ-˱‚!RehŒt™þòìÚpMþØ‚éR£¾)ûŠÂÛ]¶hWú+aä÷0Õ3%ñ~  @å³Vp>*gTΨœPù¬6–W*´ÆóY¾TjÇþL¬¶dVdf´>¶Ô¼ØºÄvµ{oùë ö›Ô5ù­±MR»ùvk»ý.ucþ­±{­ØÈÊé›üæÆÁxÀ@ã„ 8åÒÁq8º±\¼=È‚1u`NAŒÆtD g]Î@cNŽGóIzº¡/i†ÞöV–ôdî 60–o³šu¹÷ œ7ðÝ(4–Ÿ‡2?80€Yý=è×\h7'/Qi„NÁ"xÝJXIÍ5’=ž`Œ“t@WúóN›Õ8£Yù{¥;»Ò_ˆG€>X¾Õ켎sW!þÁó2¬Ý<ñ¸³ ñ‚ŠT{›'xt† “OH`ãàAÓé… ó©«"‡AMf$<¿ R>TL©}z4ËíõÈ^|Y &ØüxÓ‹ÖÙ¿»iù³Ó§4H-ºèš›¿ºïÉï6éØ_Ø™|¼r}¯¡í†Mßÿü·©ÿ~˜þI½ö®+F·ÖÔ^õÎIT<¹`ù¯ç/zsƒíŽ»7\9¹¬lIሽk×i]ý—¯A¯/=ülVËÂ!Tpš»X랈Leìy¿¨D(+ux/•Oaf®{‰AØNœ39² @ÿ&ðà|¿|¥„yDx‹†}_¬TaVBžN4 –eF§Š)Z¹RÙr{*¨³¾ð¹ÿæ3ÄôI9$„DZ‚ ÔŠVc‘ß(`-*ª´ͪ/º¬¨ÙÚ\´Øº¨¨eP»uÓ€G<vZ³ û'_ˆì>®žö?[¸ÏÿRá«þ#…Ìz¿ÐPã¡9œ3œià+°®`à!|㾞çÃÞ°/Q\T^)W_&/žihL\mX”XkÙlù½å;ëw GE¹ÊjI~¹·4×í›=`ù6 Tb«¶ÝcÛfKÛtÛl»l§l’MØœX|Þ¿"À´¥ªJ½ (b…›–6[Hòv±g÷ùîw‡BzàôŒàý µ¦Òd0GC1—År¡ ¾èW!_hf^š/s¢àÁ X8#L”ü…ÓO©ÏB>C­ü.v¥f+ÐH\Gâƒâ»âºJÌB6 ZÞÝÇå'>˜—iÖ”•Ý•l{%­ôò¾â-zc¾¼’üCÊ……•j…)6Î!а«ïs#+õŠW†²2xXÿ|›€¹u¦'¡Bp¸”õô«äDUoâã¹&9‘¨îé=!ã¦:ª¬ìY™Q+•B¥p¡ãåt%²2ÆIˆx¸‡`ƒE_0‚èá˨,·ÇKŠÞ+†1¨$UÍß¿x×Áq­ã‡,9v -«Ýr˺ì¤ïÚ£·oyvŠjôæ y羺¼©tÙ¢…Oijo­ûÜÆI&¹mÖ@~ÌtíÀKWúVÞQ§Í™pÉõ§¿ßxé0ú~aH-œX2¾åÊÉ—^ŽÞŽCþøj¥M{”ê,ö|Ý]­NWN†Y8œ* ­o +Ã]UžªÀåžË͆fkƒ½ÙsU`±a©u¡ýZϵîð{–cÞcþ¿¹¾ð~áÿ(ûx8öGt%ö÷ ]µ]Ó]nŸ¢»Zw,ûkùœjQ³l²ÂH0¤è©)+d3ûòš©jÖÌ-æ6³œ±®Ì‚GÍ®2sÅȉà´à!™€ãBÔy‰VÂéi^MeD0‘…9U&Åë¦ÐÏÛi’ž¦r˜Vc׋ãtJ0-€óZ6g/*X…‚%;9«PaŸ¢Æ·¨ªÔ‹ª. ü„ØÍ?Aý9ã*.ž¾W¬ªš¨ö‚{ š9;ð ¬Â®¤9§@'¯"+s£Ž2ôpËR 6Ô0vX…|¦sÕî¹»Vj©¯~up +¯ÿÉÚç±fíóº½_ß3ùž×[S§Rïþœ>p¨þŽÃo}í0´ë”ôI©ú*@gõ­DËm·Ø©ÝL5ìH¯ÀZDv†Ìz_HÆÎe–ÞÀG¯£×CñÆÊ±àðÃo¿&&PõÕæR°&ÕÆ-4ããîšîmqµxeJXŸRŸ X V¿i1[$-Ö­±¬°¶YŸ¶ì5î3íµX<–M–˜dË›m_n¿Å.Ù)TŒ¶nVSH ºµ ÿãä4Œ.»ÝŒ ¢¿!t=ßfàȶå1¾|s"Lá£Tã•j‚:ãM‚&—…²òèiX_­gz¯¤7ñJz¡^õƒƒå¯öÍ JFø›Wõ¹qD‰û/{VIô¬c‡°;*KÔæø³*èÖˆ¥d.±*½0ƒrÊIU»³OýòXê›UŸÝþÂ_»ü·ÌÚòìS·-¾›nô¾x„fSÓó”mØõxpÉÒWÞz÷åãsÌXÐìCH¤ƒû´§LL¶Æ¬åÖ«nˆ{Hè 6Ã4Í==t ›¯[`œçn u‡ßÖ½ãzßÿ±ëc÷)ïßý Éó„É׺—]ý%,ßz‰g8b­cµÖ±îËBW˜fZ¯±~¬|ê9GÏØTš%ÙÌX¦Á‘”̾2Jb{LU:¨êÐ-Ž6D“óDF@N>;¸Ø9¸’u(œƒB`QúªãÇ8ò_ )ð­6šSDZڙHDÿ¡>­—9‰&ë%}Ž`9¡§õð˜p†dÓ’^Ì>zNù”‹$­yåÄž ÒÅåK¸‡ª`4÷À·†ðƒœ­l†˜ áºÊ8C0È 7#gÒ°¯ÞòΚÅoßÚò@ÉžÞÈókÖþbÇ×?¾é±;¿r•Ú§Žb¶sc™óÍ×ýÚ±7_å4«ƒÍœefÓ5o˜„²X½Ô¬k6Ö›HKtË Ì†,> ŠaЦq(;Äãç{ºsî³y°s¸ph”sb`Thª>–Ðç²ÀœÐõÊõYgÙYŸŠÃ%v«×;ÅÓâYcÖ!ûVu»ÊTU†Lzrdpl¿6ë†4ïp#Òû]p¯fŬ+Œ#_Š®ø\@·f,(*OZ©5FnO,^ÎSmŸfÃ4ì)SóõZ~Qy?¥"Q ¥2âò§÷ð¡qJ]¬›{OLRažéD® a³&NT÷ˆÅMïʪ>O ÷¯‰)”®ä«}!b*)+%·>×Ã¥‹æòõiž"]u øËýŸ¥NQ÷_ÞÁù‹ó'MçÝÙ{ŒMµ ›yûút¦÷ÉN†²·ÐÂÔ©ïÔÈ® éý›Æ,|ZĶaµä¥V-Çm¤v‰_ó¯ð?jù™u§Õ°Z“þn¿ìçø( „˳ VÉb™hK¸]2N´›¶¹©;íÒdoLÆ®þ½PK‰ƒ‡•óTK„Âå[ õk\LüšbBÜÂ~-ökR,,)!8\ý7ç|¼Ïm4|"<~(9÷¢0ÞôùÒ$—œÅÞ6ŽEöy 2ÓL"·%ìZ¬zš¹q[ÅÝ=p ¿[u(F½b€…¤AâPìAœOHm€;r²ªÌR6iLIPkÀtVVYVÔѱm›+pëÚË›‚ÃJ§Õ9"=rçÊ%åc¯pþÜ4¶eî篆DŒNM•>‡Dä"º\k1›uîbsÌ}¹¹Ö­³ýÙÅæ¸»8Ziêž`ëž©o0/4Ÿ3}e»$Z\02:²àò‚­ÅÛ‹õCs‡¨.k›[;`Fôórç h)n+>Vp2÷Ë詇ףdu±Ý…!—^Ì$jË >´‘nrK‹.v“Vª …ì¦Ú¼ÅäÉ*‹•™b>ßQ/U½š·ÅÛæ•‹±8gõÅ«ãjMX”B­y…Zó‚£Y=J?Ϩ5^ Öf¿Zp^›À™Þ»ÚNc$/œÈ~Äþ¡=m—ÃöjûdLtBbìÐap³çñÖì!Na»Ðm¼°?Q¼:—«·Ä¤>£“«7¸ŸÿAÃõž8Ë}áœÞfD'2{p­ôrWŽ0 5ÜEÆ 8¤Ì!Vsq×EÊîê]æÒ1«oÚâ³ÑµÉ?Ÿ¾ö?î:xÃÓ þ¼ýß?øé›Öïxá†ëw4¦ÆJçϪHÞA«ÞˆÒ;j;¿øÛ#×?'ýG÷¡7_yí¾ŽÛŒîëqÓ9ûáFîÞ“å-—ø²E˜×1yNè°Ê¢h¸×_î58,·¤£ÄÒéÝpXÅŒZÙÐò´‘v©fõ(0¸Õ EìæW÷šƒ#Î(l;c€×CéÙ IŒ)áÿ–/?Á1'òg÷qÜ'y¸,zˇ–'=§=l…g»'éI{dsÇ„¼j*úpã!pÎqìöpSšWHiƬ4ðO¹OBÏiÂ$Lˆ%ã'“²ÆŒV˜—°z¨âKŠ «‰Œ9È]Ý|žÂ4…{F:mŠM³)– µ —„{ë6D3Ò²Œ•ˆå¹#ê¶¡’åØÜys÷Ú_Öu®Y2å®*˜„_ÝÛüÔÏzg³Ç7ß8ýî›z_‚Ln¡ðHx kW‡òL6n5n7&ÝÆ§zb WÛŒÛúŠŽÓFS^{œrb’Q‘n¦DÑÁ®èc:"o“·ËI¹[>.+Ýòi™9"EN–3¶2«Ї7YàM6ñ¯ÊB³áYF³ȬÑœ×L‡ò$Ã?bo°ÇÕXuÆÙÎý|’Xµ2!\îÀÊ–ÎÎNùïGŽ|Ÿ%Ç¿?Æùc–¾Å˜ÍlŽäk@ÌIÊLe–Q²[ÿ[wV‘ŒN]…¯%¸Xšú0U¦,{R»)õÒu&æT"®Ür!{œå¨uº©Þ&äŠí6”(²¬“• ã8YSšL×IkLǤýÓ *q}ÌP© 3V['[åF¥Aßh¼I^§{ØøšòGù]å„ò™þå;C–ÓdÒI’ÌìD È †˜^qëõŠ—žÎäÖéL&F6P _§è àLb‚ßÄ®uÀ9¼yØ„´k¹a‹¥®>°½9FX k"B«q*ŠÙSÚ`Áã0¸[,ˆ ÁB<-Ìfœîáüí·Xÿš;îê‹47½&b“¾©•g…oJ°6w®ðMN8¥øî™ŒÝ3¤¾„ €^5Tª$÷¹ù¬up¯o“<êŽrðüÊFЇ%4“±8»ÒhÈήÁ>èÈ®DòvGD$»s+Å´× ¯™®„[œUVÒݹ• bw‡‡'t¨¼:ODÎ"’ÝæÌˉFˆQs¾/SƒÛƒ¯¹ÝU"Â[g;|üå/v3Õiscf•ŸÀB@È%ߌR=8‘>ûYj1=ôAêñ[tΤÉÔÚÞù,|CêJΗ·"ª²øÑ>DpP÷žŠaå"-’I Τy1‘j1¨U».ŒcŸêäɈN뤰n…®M—ÖáW.|5£ÈxK g·–…|¡ÝXN±‹µ_É‚Â\:Å¢·o±œ¡uÆîÀ¶0:úÝgé´0ñNŸŒ’Iòe¤Z«Cˆ)Mžã×X·vêœËÇŽ¹B‰Ã6ˆÒßî'Vˆç&HT€Hý§6Ñl-É'äÆ¿z?ŽèÞÑ0¯!5ú‚£$EsBJŸ:õT‰üªéhŒnm±˜×°Å¶:¨CæÃsøÄª„ÏfÎÖ7—q,@Nj^®†Œ3µ*±pDáYfW¯Rú¬uÚ¬Y|±­AÍ/4Í!ÿ¥æàÍÅl L”¦2“P^ ¥ùŒ‡+Ø…öðëȲhŒ%½í„…±­8z™¿“¡ÆÅò'¼UÄÓ7Óœï·ÏhnÞ0ê’ˆy–øóc]ôú=¹œ,ì”À^ȉ ; (ùÁ¥…Lï¤Ú5ŸÀÁD¨X!ÄWn‹÷OH·+î¶8‚ÔiÍêŸúLtÐ7K8½°4ú¦%a/^a[˜…UaVÜF}V…YLQæÛüCÁg$¸_ƒO[Æéºéƹº¹F™ÏMüM—Z¡$™­r±ñ_óÔí¿ù3õÜø÷;>LõìïØ¼©cÏÆÍ8\^p÷ÚÔ_{ÿýßhµ¾ùÆ›ÿñ›7^G‡6§ɹ  “äйÚÝu z©Z§ÊÕ‘d„…#,ÑìÒ¬ÒìÑÙ+"[#†áÞáÁ Þ ÁFÕ–&oSp±a‰e‘ºÌ»$ØyËý¾ïýÀ[9'Ü'rŽGÒOTN¨‰¬!òpu¬uê釞L}ÇåÃ{¿—ž:üêï¼ñúŸ¸.Ý_Çk ¡ƒü^Q⢪L£r¹<?w¹Z^-+F‡Áh0Z]£•HjÈ'&cáVœÒÈ‹¸¨‹å9þçµÒ«â[ÍqÑZI,ÏgÀ>“âLßrI<Ÿ1''9ÇõûbÇCmUaÊj>³Šï~sìðC/Â;DÔßo¶Ý„#X¤y?½™}2> œœsl|bä¢ê+¯9zôˆ«Ü9rüñ•ã‡?S0®ºeUïÛ Õð±îI^íF9Ï7Ü8ÁX“?3oAÞzãÝÆÛòŸv=Wü²d5z>ï ºâw½º «gL-¥&_“¡ÉØdj27Y𬋠‹‹M‹Í‹-‹­ñÎ{A<¿ ÀÐüY¦FóüøüÂÕÑÕùmù?5ýÌroáƒÅ÷zÊ´ÓòdÁSø¿‰{°)˜±yòúh?߈:K¢Dˆ:Ȇ=«9s*g b“ˆÄ³dó%ÙîVÏósä‡ýÕþÉþÙþ]þ#~Åîû—û?ôËaÿ=~æÿÔQøBx5Ø~|?[£LÅ/–¡*NÅA©íq{Êyª©6G9¥—4e/ÍfÙ¡,=æ_¾©'–zŸ£äÍÅeM]bc·<߯¹|å¥üõá–×õð†‰soþg „¿åK¿ð ú±!Ø¡Ï/«{C•G‹( OÄR @æ(8|¾K^Q@|*þÌ–ÒîRV]ÚVÊJ¹'4Ÿˆoö‹d°ÌêÀ;ÀÍÏ;É· Q·‹îÙ#¼«˜¦Îiè"?%É?Øç¸Éû°åÜçî„Ϧo‘ßfV±a¿jRßfb"±2‡Žàq‰½¤Õ=+Åf"·šùF>O`~á¯oCg}´‚9Q¸ÒâÕ©ºTIɳF‚ÄX¨RÝ@D9ndsmÑ É‹Z-†¦ -,0š”„$a5›Ïèü0cU&âkDQbÃ8ú¯æ•|EÝìª.V¾MY€ßz•c7’›vž ÛÜÇäÅFUƧTÝa¿ýÆõ׉ýôµ‡'Vô“é7ýj–#ii]´~±ÇS¼íЃ3½vÓ‘÷襡%«Ô\õÅJ/Û0iܺÂpbü×ø¦5M«ˆ†²]¦ü²Që›fm»ây.§ùé¯X‘îaœ*þÏýÄŒÆù >im~x%,V•ˆG5&ì&L’Ù®æ‘:t7VÃ?8|`3‰C«púœ8Ãuü|Wò޲2õ÷|”Hļ\µÇ‡p_«£š,êpsÔ35pyÕܥŷݶgï^W¢0çñmêÈO°ywRýÒÔ]wöþtbq€ãèVè²ãü·®tò~nŒX#²ˆËSn=­•9Ýå Í7¸<êò˜á©vM¤Ìóy¹áV±WØÃ^'WÚðdömß{…=Œü™ŒÍëæX@¾Ï¿æKäÏòã,J}ÚK»½Ô;)Ài”ÅàÀé[ØHÒ9'"œlü$hÄxÔx܈³bcUxòú&Ž>ÿláŒÿ.3_…lî5ã$ÿŸ˜.zþÙÜÅ Âñ^]•™9„ã; «6«ÝÊà*áÇæ`òÊ– ±AÂÝl8‡ YÈCß>Qˆß©WÄPKÕëß¹êÉɪ¹Óì¸vêÔ»Gtþ¬sü²ÉCZÙ½½{î—SÐd³ËNâ0èá\³ÇlÜ$´é%+µÄ°3ö®VÁùÐ _Yð{c·K1™qSÂ1Cžfjr,u¬w´;L“,¬°(„ùÕü Y%ΊœÁG=ŽõâÎèwÄA ÎpXR¯3šL4©$¸nŽ81+]¦]m²Û"¯8ô†ˆÞát&à5×éô6Ð9fµ¹­V›똄ÉàÆëø<è+œñp 1ªwÊ»Ãb³Šî9!©ü$&NÝ+N»Ýf#&÷YÕJ[¬|“^²vÑg4Sd²‰.7Ýbb¦.V¯';èrÇ-æà9³ª£-Âç$éPy/=ë: µ‡c‹þ‰gš›}˜¹ðð÷þ…Œ÷ÇüÆÐ&€ Xsˆ7O¼$±ù¦W7ÃøO ¸r³ >B›ZŇy¨K†§7tZ#–;ˆÓêÁ–>ÚIÙ#86wœŸþ‘Fùtü¿Cúèný £ ÿì  ¿èâ¥Çwë#™R'JsD)Ú‡ÉmÃ#u´C?ˆ·ØA†±™/]h\´ÆßóŠ÷éã{L9ª7öù+÷£[oïsV’bønw6 ‘ËøÆ¸øÁ[ÙܘKË\Þ¡.ĈhÿnŒÖ¥^:°³Z.Û¹ÛK÷íJu¾´sÀŸäxï£'¯³k{zã0»úûclýÞóG ir±ãö%4M€~ÓwÖ#Ûä¶ãÇØ!¿Ý©˜—æÄþ“f‰Ø…í…MÎDàý€ï0Üg<&¶P Á=vünR. UºgÚw™$ͪٙ=R8¨\å‘Þbtz¬>g¹ÀR`jjb{Øa.tºÆ{®Æ¬EÎE®EY딵ÖuŽÜ7dm´¶;îtÞéºÝýi‡ù ú’ã€ûsӧ½êwît(§_=.s((Ûkì·aÃÌ¡û™%În î jv»E…˜ˆäw»\1§ÉŒÝF™M0bM.~„άðñ“b%¡C!†ÿäS½×\hî.6C3W;5'›í<ädÎ.:zŸæ‘Ú ˜~F[ZÄ2È2Ù"M±¤-Ì‚{Jpmt#ëÁô@^ïÊ3àv_ÀŸzæ„_=£$ŸÚ# âãÓ>ç|îú6\ìú&{°sU•m'ùÀI/ þ]…9}’3æ>r§?ØWQiÊ«¨Ä‰½“{³*yYÂÝÈ;pxÃÝè*€ÝC 7¸É#؉B ÁÀ¸Å=¢¸j¼××™SË^~?‘N|Ô™Z:*Ðú™å©kvª…ùÁ%öl¹°÷á5Ö¯eK¾ÿÝ®ÑÓ¹}±Œe ñKw3 ã÷38Þ`3*oòVFÖX®xFx(zH ~£â*ç&",B4Ëî_¸èþû-¼ŸýaÑ}÷- MDÄ•.ÀÿøWt.| ü—hvñ‹²llÂÅIN[ Cñ3jH-KÆ‘ñø¯HþÇÅ$xM§àLïÁëñ?¯ ø/MÜÃŒž;ø¥ð߯â×èĨU‹æ,8ãÿbÊç· endstream endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /AAAAAC+PTMono-Regular /FontDescriptor 92 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 119 /Widths [ 600 0 0 0 0 0 0 0 600 600 0 0 600 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 600 600 600 600 ] >> endobj 92 0 obj << /Type /FontDescriptor /FontName /AAAAAC+PTMono-Regular /Flags 33 /FontBBox [-35 -235 728 915] /ItalicAngle 0 /Ascent 885 /Descent -235 /CapHeight 700 /StemV 83 /XHeight 500 /StemH 74 /AvgWidth 600 /MaxWidth 600 /FontFile2 93 0 R >> endobj 93 0 obj << /Length1 10004 /Length 6583 /Filter /FlateDecode >> stream x}z p\×uå»ëþ½þFw£Ñ zAÝØ»ÆÂ ±‰ (B"H¤Z%‚‹H‰‹¸ÊÉ3’H‰š‘%Ë’\L¹&“ÌRáGá5*SåØNR©a&‰OÁ%;5qÙ§TSƒdR©ȹ¿MAN¦wßïÿþÿÝóî½ïÜ÷ûÂù‹óÂ%® Y =óÜ‘³Âú¨í¨þà™K’å¶´„ºûØÙãϕ۲"ýÖñÓW•ÛÚ&!’S'æ-·Åߣî;Žr›zP7žxî•r[ù¨¯Ÿ>óL强‚öŽçŽ\©<_,£|þÈsóåë3¿DÝ|öÌ *íWQ={~¾r=Í`<•{—¯°$A&EŸ„…[ºâPúžÕæ/½wÿO.önûk–Æ—üѾ®oqý§_šû­µ­¥?—ßDSÇwÊ|O¾¸Äfpþºôç•{WN£JÞζûB´‰pNR} TüáàªaÑs áǵö¶Bû•Û¯ôØÅôu‹Æê·tÑŠVT„„Ǻx€‡íƒ¢ †gÝZ»¾Ð#ák0À'qÕVôוoôp›°± ɱ_?Y7úÈ:zá˜J¹Nr}áqçþÛ•úAµ6¬óŸŠrý‰¨µ®ÛÃ5¾w­R?¨ÔŸVê×?¹J}¸Rß®ÔÖõ8ÿq¥íåÏ¿kÕ¢FŒ‹IqCl{Å´n@%ïÚ&á¢!a£sÂI+Â+¹…KúPxyÆ¡dû®ûBŸšY zcö>­½r_œ¨ÿf\>üTÇ}AíÉäØÉQ“æÐÚÑњ‘ܞ7å¦ñ'fÒ³É[É[;ÞJŽ'O9j*MVó·fsISì9 9=“2‡f£ÕÃùÙÙ-¸Â÷ÁWpù­YÜáÙÊP[]¹Ïp‘Ú¾+iÊ™©™ÇgÌë£Qsht6šJ%Ç̦fÌF£©ÙY\¥UGŠó¼•ÇlصVœ·—ï²wÆŠšböÖ-¾çÞ™tʼ~ëVôô¨´ï‹¾ÐAâ‹C• {‰±ût} 7C•NE¹#J§0ÎÙQ<[oßµwf #MñHRÝœŒ}Í3æÜ«÷óâàÌ·ØG£¨äŸAÇJÝI”f„…ëçQn£üåç(£(QÆQ6¡ìB‘P¶UÚƒ¨gPÆP”“(u(—QZPjP6£Qv L£$PÂ(m(üÜQ ðÇ<öÔI1S鱺-!!–ò1žþÿûh¿rÒö…ûÚ¿ÚÔÑåNŒÈ ÇóÂÙ|ð@¨Elœ","ˆ1Q/âÖ-^/Š¿¡óômú©””ž—“ò€¢)o¨ê÷µçµÛnÙ ûïèÇôï8þ3ãü†kÊõnÓ“ôÜ÷f —ÑŒ{HxªƒÉxêÝ!r´Í”$Ÿá«ÙlJ¹’!Q±$>nʹ’[’ùÈ+é²ÄGz®äqë8*Ùu7WªÇÎý¶%Ó–+9ín¸ Ó»dzs³C@}lƹ肨à&ZZ’­°Ç©:ìªÓéÒTÍårIBÒHÓ?)W\b‰RþçV¾ËŸò¥È–µ…l¡þP¶ß!~ö!ýåïý^÷÷¾× ùýïK~6*]úá»——»- I<¿ÖNƒÂ´4þ¦¡ªJ›©¦s¹tÖIE3¸´>ZÆç¨ŽÖ» £UAátKÆR¾«m†JŒÔAbÀñ‚ âUnˆL Ä?ÄÛ*.HÅÒMÏ¥Žè+šÐKºà§÷]tÊE·\tÅE32m’H~ÔN¹·g@êyä` .…ȹx Ð3sq8¼õé‰ln÷áüŸøFN¿êÙ;gF<ƒ¾þC7玼v¨€i&qzÿÂÒ»ôy½ Ãt,—®9 ·¨êí„ÞΪÞA´‚¬·âp8ź֋¯Ò;Ef J®H8ne Nèï°ø‹cp“Å4Q³Cé™zÙM_×é”N/ê·t)+Ó¼D$ÚOôÑË´AóÐ4ýqhî‘l·ó‡wç²Oo _œé)¸8rÛQ8ôÚ‘¹›‡ú}ƒž‘3wž=õþéôþÉÚ)ú|Å/öYzÃ4}ņéZ2]¹a'̧s!¸¬5rµZ45Øîòº)ø‚MUNÃ)9}²¼b,ó]ý=}…îZkTÙêÕÒ ™¿Ì&2­‘l‡?ÜØã±×§úãM½ùìÖ–°–õô4É)˾¶Bg0.§h(χ¦ ¥mýq:§óã$<çáCøî?oŒ'“ñÆþd:¬Ïdp»µ5ĶIXvœd/iwÚzÆF†Jƒ*Í)ôe…Lå#EÊ+4„–Lgeú±L·eòÊô‰Lwd:,S^¦!™æ`ñ|ñÜùóç‹çÏÏá¸xþü¹|ž‰S?4Ø”.ÎZO*‘ÛJCóŒoK9ØFih/ÈÚJI%ç5Õœ)å@±®ðÆÀ`‡úvVßc“rÊ ") ø c_ψ?´þ|é‹ô«ß¡ÖÕì•>œütrõ÷ËcÇØj06/eÊcó¨ÛƒQE])‘¢ân¥×y’ªð±­Üõº®y î°ÈC˜cÁ‰/éNŽk¥—Ù´'{ËÕ{^¶ìr˜Ó0~­ê@.´\Õ–‚–ºY!Ѓ–‡[A‡ÃãzAIS—þ%½O2i<¨b¢hÞaP¯²˜dqbñ$]e7œd-úxÜY»X¼±8nßoÇùxÀ£,æ![¼›½è=dYþO³?›ùÒ¾… Y_Á—þnŸâx¬"=ªÕ½ùùÕIéÃÕGçæhñ3^HñMk)¹vëGªŒ1¬µjÂVpç°!aÂB˜®Mô³Õº›˜¬=»ÖþŸ”¢¿YÑ+þ¦üm{3äìˆhO]œg…T4í†éY†\H¨+fç’é[Â% mep0Ê5렆РU!ö¢ååV›ãZžÎäénžryj¦P6ÛHòÝ8åât-Ngâä Éòæ)®´Y¦‹/+K9cQfÏÑÞ*),2,"uNˆEg8¦íaGb­1»bl¾[]ïvI¶ebTWGøZ9ªû¨Ð—‚Í‚élÚ#ÃÁ9Ƈú:¥tƒfów#Þ÷f< Ôžn;ÝSnr+¤¼¢«Z]vSfrÇôåIÕîHu<‘|1–o¬Ózf†;迆k“…áTf[wÇð.= <º£0Ú¨9;·7zÃîÕß®‰¥¼ãº¿9™êÂ|Hk+%à/†H‰W™¯Üfz‚Ýçye3 ÐaË&f`‰g¤þá$XV_„m-)< nG9}¤ˆû±Âel'<å,Ûî<Ûî®È¡ˆ„*y( 0w¥LýŠö)4ªX ú ¾£ \Ö—VZ0Žž‰W é7ÕÈùå7^8ÚKýÛ&}¡¡tópgØHo‚5¯¥Wÿùku†4ûáèÀO]žP×£=™ÑB=l{ÛÚŠTt±Q|»Œ†7 4ÂÆ‚†86¿)åY,ÒÞ01Ó¹ÒÙ4Õª]Æa{ñ*$´ ‚בNÇO î”2ÅÜ9N®ŒÄ8#1Áö6#?ÍNÛ«éÀ!ÃÇ7õ¯âÌé+nšÐéý-]³ï³K‡TšTigæÔI°$& …î>æé†N`3€fmÈLÓõFžž‹õìlÏÍÆÓžÖþ‘ìð3;Ò;žÚ2YLÒ#ôÛvç“GÛÇò‘dd‹+ò4Ù:øôŽtÄ_·|y°Ú Û‰‹ñ ŒÕ-‰Me¡n›^2K¥H€Yo˜ñe³ÆXhyh<ÍÅòà*nU¶Bfum¬qd(” oœD,äuzCvbñÿy›š÷X|ÖxÑ€%g÷gà#Í€t_;Ä8Äìý@;M6l–à—Tð1·*»#³Ü‘Ý4Ô›–`oN*~C’iä‡R{`ó¹S#Om ¦baïô¶íãîÚþŽ©'½é-`¡ŸêÑx½sxw¦píÆà‘áI±)o|öíÁÁŸy=Å£-=qøß 0 ÃÞêEFüYÀñ0¢Xšb‘I+‰€ú!4šc!¨Y°ŒÏ›œV:&§²ÉÕ8ÒÇðÖ׫Þ:RƒAÕËÖV¶»‡8ïÃC.³¸Ätí8‹t¢‡Å‹ñ$ÄÁ Ä.ˆÙ¡Ä#™™Œt0E;SôH’&B4]KÇj.ÕHÇ}tÉW vlŠMŸ7¾¸dKjÙQûåpºT'íwmLn{r ÉÖ×úÄ`ƒºúëGö曋©­õ õ«»XÀÙ46·°vû©}gÝ5µ:{R½Ù;Ëk²LZ“¾ƒ¬é- Ío†T<¼CI.ñfI÷²²‚dí²®²`‹÷VüGr†Õƒpæ#‡”k)ˆ…«ƒ•õÔ •Wçe÷M 9;¤i:u†¤Ð‹5¶·ÐkÑÇ­lU°:_!8sùòå§¥zâ5‘|`Gþã?¡çGbOMÛ]ÃNÛðäÈ꿱ünl­]ra Ma«åÊ6“ŠÂfQ<ÐM±¥ØsfÊXÈÀýK¦?gF…¶‡^·1>ÕÁXêX+ËÏ,ÓáÜëh¦xÕêâÒÕ8nË~öÐhžåˆ}Õ€8ÅâKXK§YŒ¶@ìc1ÓÊGŒAx´ƒµÒdíÁZi¿N %ÏÚé¤íªÝÏú¨àøÎA÷Ù>¶SÚSöD¦Ú!Ë 3•˜&¹§»¶Î$3z}¦-ؾµÑPBl>êÕ?Ù>îiß3õ¤‘ÞÎMt†êüv¯Ûn4ôe7¥¯Ý¸þ’Ͻ:;8üWÁ§Ž´MôpÜGÎ/¹Ëb¢œ'•\ÌJ΀•,ÞŽÜÁrÄÌ# 8aC”3]Æ‚ –X5WØÊ6®Ša@fˆŽ ?inIãŃm¦¼.f•~A*ͦÓ±¨éµ÷_c¯|ŒâE¡©ÙkíRF¡Þõh¿¾‚T€ÊaýK³gá0­¼¯&žØžŸè¨}ÌQßö´%´Ý{°þ]:è>0²úcòµ µÕúS¹Øêw¤«–}>é»à÷Añ‹²ÙTIIãŒ÷„)&-›ÊRéÛ€´YQÒX2Ü¢i|„Ð[JtŽSÍœƒÎ û±ŸéÀöž{qåÊm”;(wQ èÐTBâ–ÃVeŒUg´f·šnºë¦„›Üþ„ŸÎøé?yýtÇ×/íñöKû鮟>õSÎOütÛOv¨µjùª±´„̦xîxrcIN¾«âšðDª$wL.Nþîï®þûÕÿÝ«Ïfëcì’«{F¤Íf£‘ÆFæÃا‘:™CÑHÙ5GðJúÀv"-•ŽjêMˆ{ymH›ÒdÎ4dp¬g9}~’Åë‹[äIY*ÞÓå°Ü"ã*€ü:³‚wYLBp†ª¢“YÖ|X wb ÆŽÿܽ=öÃö3v¹Xº ;âç\2K¥6N÷=ÌãÖùóF“Ýv5EÙ¸úæ pvÒ5—äR>–>‘¤œ4(IŸJk’tX¢ÛÒ „’¼øx8×Êq"‰$rcô8ÊC¿±xL»¤1©‘/j‘lÌý[y)F`L×}£ÿ{OýèÞðñôïÞÓ}úõÝ‘¿ø 6V—×þ/H,ïë”sÑoJªñö©/›~à þºVµÓA*Gp‹ ëHLb eÊ<ŠRD§»s”V”-(Jqå…ì!¹ò¥/ÿÛ–æX!Ñhdš›}M[²ð€_nïÔõ{j½vëXþ;|ŒD l&‡u¿ƒ-›1¹Å!ç”.cíF ¸ ò<Ói,8`#sfΧ;Ð wXù4ö2Ò¸Œ¹gÃCîi¥U—±¸gµCŠU[Uw²fØZ骫@®là–ÛÑB±pÌáu4 X¼ÁZÊ|K}qQ C·ÅæA— §¢4¡ô¢(X8cºÇi'NÇq:ŽÓqœŽî8¶^Jó8[Ú¿~I—$pI—$pI‚/ÙŸà@h¿§yßE/©rÀÓ8ÞB…¬`m•k=â,i²3èkȹíñ*¸!âMFrhswª%¤?ª8ýF:ï¢ÝÁl¢fSëêïÐÊvo4àÔýÉP¶½¶eszõ=š6ÅŒM=«%k±[‹5C`þͲßSðûkÈW°öšÚ2¯ÀIx¿¾TúrAc¡öá<Ù€°­:é[ç’Œ¾Ë‘¼µI‡7©‘ÍŸiFû+Xjg‡b'ÂW¯†å÷êèVÕúHµ²¬Œ‹z\9˜Ÿ·ÑÀ;Öñ±Ö ,¦Ö2Q$I–Fnèª#ÕÞïœÈÕ=Ö7éjŽÛvÓ˜^Ÿˆ;‡÷¥¢F €ã'dì6t„W¿õÅfð×0ð…¯”Q°ónЗyãı4Å"ÏÖ[êŠì1òŠlLáÝPÜÍŠkŽÉ¡ª[–Æ™ OÅÒ8‹lLYì¬ç#;Ùz¦™¥2UE8ÙÖFgÛÌ-:¥þrBÄI"¨ÄævqðжúäÀ¡-On«ßëËloŸzÜ—…œú»«ÿªe|®Û‘Ñ&®Ó㛞™kÛÔð4ë\Û$µBïÞþϲÞF zO!õ7cÖìÇŒ…(f  à:3$ƒÅ„ilH‚,­«¦°Ñ0¢@$ÊtÌrR‹œ2>’ `½äŽݺ;¸n–g®ÛÇQÞÄz™E…±Ø’Ý̙лYtìlƒ¸Êâ 8í‹mt ÞÉ’Íò”YÙçìɵµßÉ(fƒi?ÛŽ•r÷õödæ,zÅ¡F÷n;uºit)Q4âÝýÓxoKDæ¤hndÝ–ÆÓ¹K7çÇ3²j×þ‡t­¶±½öy}'ç÷áVˆ;p;­Û¯U•x=}È;ÝÁæ%Øðµ-•òH}h‚’E«1ãŠfmFTa¶b!C‰È†­ §ÍSH•¢*o­TË ﺧÝGÝ2 Òuêþ<‡?•7sl=o*wܼù_ µazKCKÈ>N%º›"ÚGL†í‘î‰ÚV‰è«?d:}§áC l©‹ÆÊú&lȢƂ@¬÷&lù½9¬…:tdm îÈV_®l øŸ ÜÔu5øÉ%7¸,˰„<_UÞa¶ÙB²øºöÖßÒ6>vè&! ºxÂwŇã÷˜€~ L¸4ã.½É¾ö ‹ ‹Ë, ìzGY4A,¾+Ž´[IxÇÞŒþ·98Îâ&ÄìÐØ[­4ßJZ_n•”æ@³ôÕ8Ó8eëéFýÛõÒ±zºPOÇbôZ”ðô×}ô¬¢½¦Q‹F D Dë™C%¨TM=Ju§ƒ3,Ü?®X›Eå· œ^нîɓݩ¾G²ãóñdj÷–Ú¶tÐê{î¹ÔЦNo³«9ß‹æƒ7“é`M¼Ð™éñÖ¤ôšú`$æ÷%û:Ǻa÷°+péþÏgœ¤Fzïî¾\žO/•wE„µ+‚MhSy¶öJꪩ§µG\5Ðx~ hÀQgôÇS£8©ÆFЬ‚uZÎã‹ëyçMN9‚æ-^t¼âö0m6[{€°u ´ü…Þ~k}¹Nδ—#çê_Oìè‰FÒG Í}ÉË´òLíÕ‘_îol5„ò»zþ–õ Ã^wà]|Rü·²~äƒîá­è3¼ÿý°ÿÃÛ¶ö¥Å3¾k°#Óg˜þeH^aÝf²ê¦©ê½‘²XÖÍ(XñÏʪÊN›$%—Ÿv¼¶±v€Žõà—¥(ïÒ¹X¼Ìié[,.Y«¦÷f˜ÞÓÅ0msxqÙxèá… ÒõÊš/M§ÞÀ¬¬Döoïn Œü†­¶­±gw`ˆVVÿCWÇð¾¶¾`Ïáå‘ÕÿÓ2Ü-¿O&¬Bê^6±háõMņw%/ú)^¦ÂS,DùMDù›ˆ¼Tz•Sƒ>ˆÉËá ŒÒ g›Y„Y\añÄ‚ÍzÈ9ÙM­úµŠïÆÌ´ú^Âû² yA—½…1+‚ûS¾«©à/Èi¹@ίøã™?{ò½¹ê‚>¬›õ.™—A¯•uv/tÃ/G XTu¹ÔÌÊ]gRÅ £læ1“ÊÏ)Iç ¬›²tï¤rUyM‘‹ ²½²åjí¶Úï\•ì^‹ûb;Y%ï-^s܆©/èÇÁ©Né^ç–n@,¸/Ý:oAóKëuD6²Ž ƒµhT-®ºírD‘nêN¿¾n#›Wõz*©üzÿ¼‡k½²`x]°xL\ÂŒÒÛŒƒÎž±™EbÑ®Ôqè}@ÜÛ¬îTgU™9ñfü2a'Ê,ÊI”«( ¼ï2LžQjqLßÇñù-8úbFïÃñâ1ýw}•-þk0öYò—g,ͳ†cÚ{Ô6±óéÙ9ùèìÉÝkGèÆê/èeÌa`õ—°Ý‰i@b”:ñ.ñÞëÔ[s‰÷ÿ‹B6š|U‘y›¤­ün”–VótéæBÖgí?áN|—/~’è­ß9`æ3ZDVøQúq1!Γø Ó£â1l L‰ÇÅøõÏ>±¿šÅ§Ö ¿(ß[CZ †ù3Ò65½ûÌóg:ž˜?~ñô‘óâwQ¢ß endstream endobj 34 0 obj << /Type /Font /Subtype /TrueType /BaseFont /AAAAAD+Arial-BoldMT /FontDescriptor 94 0 R /Encoding /MacRomanEncoding /FirstChar 88 /LastChar 88 /Widths [ 667 ] >> endobj 94 0 obj << /Type /FontDescriptor /FontName /AAAAAD+Arial-BoldMT /Flags 32 /FontBBox [-628 -376 2000 1011] /ItalicAngle 0 /Ascent 905 /Descent -212 /CapHeight 716 /StemV 0 /Leading 33 /XHeight 519 /AvgWidth 479 /MaxWidth 2000 /FontFile2 95 0 R >> endobj 95 0 obj << /Length1 8792 /Length 5814 /Filter /FlateDecode >> stream xY xTÕµ^{ï3L^!ðœ0L™’„G$gòR›*¢© -ø"J@Å ˆrÁÁGPkUZ (HEåä b£D©½ÖÖ‚Õ*öe¾Vo«…Onë£aæþ{Ïð²~÷~÷žÉÚkí½×¿×Úk?ÎÙ;]·,ë  ZM‚Ì7¶w’zôS`… –wÉüÐr"לït~÷Æd¾p=‘ãúïÞpûw’yz쯋:Ú&ó$ñ“¡ ™gÀG/º±ë¶d^ÿÜ}Ã’©z#yçí·¥ìÓï‘7nj¿±#©?ª|Lç’¥]©¼[åoéHé³Qί“uç¥ 2Gï¸*ãä¥ñt 䯨Yïà®yÅ8pmvígîÙ,ÑÖ?׎”üÖùÐÉ“§N{É=Œ¥’¸kzüJjðÒÉ“'WxÑùTÍÆ{ÛV3Ås´ ÃH PÏÅ\™Õfø\Åí¼@ub@ÒÅJð‹À€Ÿ/R¦òÓŒe{«WÃ^ÔëÄ0‹ê È£jðFQHEJm™•´³ÌSV7ˆ|¥’-2iTÝÂeWëÆ>aªà¯¥¥KÿÖÛÞaÕÄZá¢\h­†Öp=û€ð`Œ=ª'm±´Ìêî`†hC7Û>2DY¦¦¸ÉFCÁÑ$FPê®#ix³¸HñgÄjFþG±’úÀ>ñ°B=$…ùéÉ©5=–™U=LÓQk‰0(ãݱ’ÉÕ,c¨ÄãUVAòŠ(¤(F-Š‘Šb¤¢p*ŠÙGâ^ÔÜ ñbuŠ[©´²œVÃlT.†aöè1Õý¢@ä#0Þ}%Cia,-Kz–oªÔòcYÕuÄRšâèrWlx~õ’}¢Lu¥<–_$6¦ë1<94h)OÉ1).²‡éVPG^Nd‘AâoñßÈáæ‡‘—ü)þFŠÿ*ÉüHrQð_K>Á?Dc×ò?ÐfHœï㇨ ü–÷ÉÑçïñ~ª?ŠüBð~ð‹Á÷Úůé}¼/ß7Ù™y²³üŸtJ^”†äUýüþ2@ï‚™Ð(ðƒàù་^‘O¤ià»Sü§|¿œâü%¾‡&ƒÇì,é‚e»$Ûe;%{Á¦d®u¼¾Ÿ¿ÀwR!TŸ·K Q¹#V2ZÏÞ‡ö߯»ì‘ú ‡oa!ö)”zè¨ä4„oµkd#Ýö~CïçݼÛ̯1ýf…¹]Tú++*· ÃoT5Æv#èå`Ù̱~ù¤5dpÌ êæ÷ÚZ<>É~qZ´GI¤J"¤^%ÉÚJªãkiˆ£• U Õ »HCºtè{ ;UI¤e [±›tÑ D' Ñ D'@t*„´Ü D§BD€ˆ"¢ "@D€ˆ(„ô7DD!Zh¢ˆV…h¢ˆV Z¢ˆV ZÂÂÂÂTS!L L L…¨¢ˆJ *¢ˆJ *¨TˆJ *¨TC! …0€0€0 „/^…ðá „W!¼@xð*Ä ƒ@ 1¨ƒ@ 1Ä B 1Ä ¿µW ¾ È@ŽrDAŽr#€Q#€äHªë2r ;ì° ;ì°À(ì4€PX   K!, , , ,…°€°€°¢ˆ z€èQˆ z€è¢G!z€è¢G!ºè¢ˆn…袈n º¢ˆn ºâÿ<4ü.rã]ËW³±Š¯¢cН¤£ŠßI½Š¶+~­Q|Õ(~+•(Ž¡V¼‹t7³õšì`¶€ kAK@›A»@A.%†ô>(Á'š£´l× ×f×.×A—c—kÐų3œ›»œŽ]ÎA'7‚E»´¬Ï.ö’]:_¦±=T*¿ŠØ‹XT;ÁwÙú¨~>Éž³õ}Èí°õ `óìÒq`síÒ7ô`&»ŠtMBÛR|6\ægÙúÕP›iëcÁvi‰Ô.ƒ!?jÇâ‹úpÈ =:iÉgëÓ =ÊÖ§Hm7•ÊgNªPî9 ˼ˆÁ¡OúYHcfº~\X?ÿ†Àbz¼gôi`‡ý}ìjÓ£ï¯xÊAÝz¤>Þ½)nIþ¢¾Ý¯¾ m1ÿýq}œþ@EŸÅ÷Ãï{• [_côñæP}µ^©wU| /Õ¿¡·ë³ôy~”Ûú5ú~é&…YˆïÜ£·¢ÁËÑ ¿­_ê‡/p±Y¿]7õR}б_Æ—&KÓ˜Éûe¨:i½ñ-óú­_UÓÇrÌ2× W·k®«Þ5Íåsr]äéÊuq{ÝYî ·Çív;Ýš›»ÉÛ—4òœëTǧ&3š’½8Ÿ0Ìc™gnNß k¨há-³ëY‹5°€ZæÖç³}}Ì3sŽåðÕ3kH µ´Õ[“-}®Ä,«&Ðb¹Zç†z{ ŒR‹¯ïcÔêc Y´¶ÈÒ€JZ{Q?1V°öþp˜òó–×å× ™ž3¥¹ñk’ˆ*Œ4Î=ùç‹#­G[f‡¬gG†­j)$F†[¬»fׄúy6ÏljìçY’…CýZ'Ïnš%ËµÎÆ0Ô>Pj˜ÍYP£RÉ æ®'Cªa?©—j£¤^ àÐ+– zžL*Qz%žL¥§1©×{Ôhjì5@ÇOtTéõÓy:˜1À6ö– –Ï`!©ÅB>C96V5¤ëP©@†ï=ÕΔ1kü9JeâY•‰Ê–Hú£š‘ šÉsF'w tÎòÿ'uÔX¬jÙÊCM¾¦ˆ¯©±6,_”o­žo½+—É Ã%‘ù IÞÞa-óu4Z+}Fo•Â}¥ú¬®ò5öÒ¡¦¶Pï!³£Ñ®2«š|íáX]m(x­{ÏÚ Õ~­ZÙXHÚªS¸¯Ø Êê:i+(m¥­:³NÙjZ,ç}k¨×Mõጫä1žîÁއëó¼Óå„îŸVœ¿²h¯Fl¥ÂV†¯ÞÊɪŠ`EPVaɪ,g§ªòWN+.ÚËv¤ª¼(ÎñÕÓ™ ‰o±&Îl±ŠgÏ É©b™Á×ÙRù¨ê|jZ܈?ä»u-í:Ó¢ä$5ÿõéúºgÙ²eK», ,%j±Êf·X“f— ¦"a”;S&„*ëMKkêK  2'X—4'¥ ‚¦‡œäâ=Η§ˆ®XáÈê%ðݰ „ã0¿ÕÆU‚¬º56ÊÓTÆOLrWeÞ.,®†…X  ’û“ÜÌ©€Ðíï®è®éñ÷TôÔ8Q»g; õíòUjß.¨+°ôL0 v…l¸%ím±GŒT†{¤„K™Š×ýs\•#{.°è£z–ªæe¼U„‘JA—µ¤õe2'Ÿ¤ °ˆ³¡ZÉœ*’ɹ9\í¥Šž¡Z ÎX”øà Å'>u’ó±“ãIRê±é9z—aÅØINÿd¬Š.Çìüç‰]tš¾ã}=ʆÐhœF¯¢Ë™ÝÇ6%–'>¢Kè!Úšx‰­I<‹úégôOxðG¼1kèJè_Eô‘øÂ‰'ÈMë(¦Ñ,–Gíô~ŸÁ‡éú û^⟰šKkÐ^-)˜x9qŠÊè>­Ûq4íEÚHû˜3± ±_H£(ʉwïS …é)z>Ø€vÓõ´–câg¾OOSœeðy¢Áq–.§«é&º•¢ô,½Î†°VÇQljĉ¿`¥1ði1}Ä&²+ø6-#1=ñ[šKýôú+Ú\íÇÜx]âG‰Wpú~‰yØ~ö²£ÚñÀé»[/àF¯„ª‘+ag>ÝM/ÓÏé?éï|Ub]F³aùU6’¬‡ð•|¥x‹Æ¡·óàí2ÚLÙ´—öÑÄæw4H²\VľÁæ³ìï<ƒ/ä‡Å&±[¼­1íLj·üˆQm£=ôKzƒ3Ú¯d­ì:¶„ý€ýˆ r‹ã_hníníKí´£$>ÿ2qeâ3œ¹ é›´‚V!¶OQŒvÓ¯è7ôwú}μl2[Ķ0‹ ²c<â3x'§ççÅ•b£xY›¨Õk×koh¿uü›cƒ«Ý?µ=þpüùø›‰—obîd¡ý\à,¦»0+¶ÑAz ­¿G ?Éùƒö§±9ìÛ°²”­g°çÙ«ìMö1z‰/üFñi¼V—ð[§5üaþ¬–7¸¤øÿÿL8Ä(1IÜ,¶Kô‰#â?4¯V¢Óª´Ú-‘©v\ê˜íØáØéxÅqÂYë\èìtþÕµÆuû—§ËNÿ1NñEq+ÃÜuc&­@$ž$\"ûèuDôWðx>Å(²bV ¿§°fÖ®`ßb×°¶†­c±ÇØ&¶•½€ Üß<ÈgóvÞÁïáëøý¸ËØÍ÷òŸówp¡rž>Uâr1GÌ7¡]¸Ê»‘Ý(ž‡Å[â/â¯â8Fm¸v‘¶L[¡=®=£íÖÞt|Óq#~[Ž7§§œÜYèáï¼Î¹Ãù'—Ó5ÉÕêº×õ¶ëîN6‚•Ássÿìà °/âÏò\m;Žâ‘8ud£çŒÃl¬ŠPˆc\²d=|Æ ´¡î45 ‚]lMd¯Ò*'ø0ÔÉf¿çƒÚ!~ ý†EXöŒ¸Éñ:/¦Øºù~¾ÕÓn^˯æ?Ä>Ä[ñCÌ÷Ûèv=[J;Ùq6•ÝÉjØ*z›ç‰ÙìªMlåKc—³è.m!}ûl¾V`Sp;ÿQüI-Sûö§>z#ú½Ï~L'™#q »›ÀnÔŽ]æ>Ì÷µ$w½yXg«° °ƒÜàÄ,9€¼Ì]ƒ•îÁ^‚ËGj¥9¸<»»ÞÆ„•øaâîÄí‰%ô `O²rv’õ`EôQ‹{¯×°JÞc°/ýÚîý¯…ñ…4@³|ægÕXÇËÝŽg»?q¼á¬B´ï¡M˜ÑÂlö  èMú˜¾`nŒM•Óø;¾‡è¨R'Öììãõ©ž,E+k½b=ÀÚ8}âú îÏ8Ž-€}7ÚiAœ¯¥¥´#x7‹¡d!ví2úúÅ&ãz œL´ô(v­øô{úD;¡ü*ǾÐÈ®F[_зh!,L¢VÖ‹ØCS°³6Š_"Þ£™—êÙ(ö4p¬Ð,\~Oqü™q*_™˜Ì‹xÇ$PÞƒ·W]Ân†ÙèÇiÆfÐÄø,øðšÅ~­¼xœw$Ö‰[ã7Ð/èÇS[îj$2ƒmfÝôKj§M2¹fâ„‹««*Ç«(”SZâíUlèQTX?/Í2ú¶_²D;Úh²r°Ûh _ñAþ¹,Çwòºók‹D´)±!•£Ñu†503t¶¨X¶£ `¹¿9m†éû0R-òHeñµáÅÖÂ$ ~Õ«dÿ’'ä:ÃJóÕûE¯‹`h £ͺ½Ø.,4ûƒTØdDÛB¾b«®ÈnoÑ›KÑY·Ç L£àšŠò^oN2°½YÙ)!#ó|¡AOÖ)I©K©eÖÙÈ2é£ïr|[Æž„|èÓd™tL¦è‚É> endobj 96 0 obj << /Type /FontDescriptor /FontName /AAAAAE+PTMono-Bold /Flags 33 /FontBBox [-51 -235 754 945] /ItalicAngle 0 /Ascent 885 /Descent -235 /CapHeight 700 /StemV 137 /XHeight 500 /StemH 122 /AvgWidth 600 /MaxWidth 600 /FontFile2 97 0 R >> endobj 97 0 obj << /Length1 6600 /Length 4122 /Filter /FlateDecode >> stream xåYës×u¿w» ,^»x-X€x’  J¤ˆ%=l‰–Ô˜õ²¥Ô¢–\ÛõCU5¥3•§í´þЩ›ŽÛéx°YÖŒ<“Ä™L_hOk‡3N:éÄ“~Hj³­'SƒýÝÅ”lç/èçž=÷Þ½{ÏûÜå•ËWϹFxR;uþÄEb^ÂBè[§žºïÐü6à©Ç.>~Þ¢1þùãO<óX‡–N¢þüì™Àæõ¿hÇÏ¢£CRö|êìù+Owh! üèNYã/ž?ñ´õ~²:¾|âü™Îüž×€S/<‰}±«ça4ó/Ÿ±æÓ:öó¾9toCAhd’p$`¯ìö}“f=€Õ}ü…ãÞ©ÿ"=ü‡lÊß>»w…áw}鵿ßrñ Ìsà™Î…gø«A¬TÇøcÜGÖÚÖ0v‹8ó·É“Û³.Ooˆìæ.n²$A¢ÄOœ˜kÏßÅÀg{¤ÏõØ?×ã EôéàÎm­#“¤@ÒX[1{È]¼¾Œmè„ÇšÄ}®‡·Úšc#2L’¤Çz |8!‰1Ÿ{þ\xö6‰ãµôÉÛx¶ƒ¯YØì¿r›¼Åhà%†¯²y^ëD5ñ]†ñ¼Á0æU!F/Yø¦…u4çW-|ÜÂ/ZøU ßµ°»fë¼ná,|a¼çE ßµðÏ,¬3Œ},|ÜÂ7-lο !úÉ2y’3_¨n\›µÙ…h"Ÿ3Þš¯oÍF ˜%vwŠ3‹èìYžÅAŒÛ;«®µ¨AVVØš‡ëÉ„qme%º>,úyë3”|¶£fu@X’˜»E¯Íc1 d"Ê:’‰dû\˜Å»Cû×ç°ÓÛ©Œ-õÍáÆÉd¯ªK_»U$Gëo>Bf£@ü‡àÑÂÃP%W'2àcÀ›€I@p0¨‚€ `ã ȪÀÖâlÞ;Xžâ]."Ò&p–|ßêa½›q†ÝñÅq÷/éµ}a¿€^ ;¬ÀâÛlÎÊ.ÎéƒÅ0éÿŸ b½u…Lü,y…üöÒ¯ÐëÜiîÛ|ÿÛ£¶³¶¿N 'fįKqé†ô‰ý)ûªýè²å ðêë5*çëMNUTßvƒ+4Ž.6yEe$_hº9žÝ¹ Mϱ;G¡éq;p×´;Ü ;ë—Z†Th:íF¸ÃÛ2¼……,k®nB´Az¦ ŠÅ9Aõxœ‚lœN—(ˆ.—‹#¶šHE$&,RXl±Ðù1ª8êO¨ *e%MÒ*Z%[‘¹ÙOïÐÿÖ·JßùN íÛosw>åžzï½ÒÚZÉl!#J>¦×è“ç~“cl©A…õÏo_ÃKÊ|òãË)Ȩým<ûæÆ}…¬  ïÙ|Ö×VçÅ%‘[\%¢dÅpµV‰KqC]Û\[»*c׿rªüš²†7T¶—K¡`ÀÃIÙi¾"Žpï÷W&’sýÑðh.ÊÅ£®ZnÏØð¾ñ~±"†CÑ¡%˜?N’Û\ý)ô'‘ùŽþD‰Ï7‘š¯æZME­¤|k¡“¨ØhÑF_¶Ñ%¼'<-òt‰§¼'ùÅÅEe Z&à ù7Iÿ­3á§çYeCI/Ÿ† ½äœùÖoº°r¾©S¼‹*Yc­°fØÖšº }.Ű¯Ž5vãîŠC„8Ä®-x@y˜pœNÞ!ˆ<©›®·”ue­¥´ ¨²š &Ç€¤Z&žº¼´Ì¥–_jÿÁ2ýá3?ùÉ3íø2öv`#ÎÉ/A&ÁŽD8žÏCä`ÖFòÅQ L wÚ³W¼pdbã®HÛ(FvÐXç {2ôF°ñ˜iÁB »b(khiaÝ(¶  c ±k7<¶Ï7 [¥1fL3ïê}»\+Ï——Ê|¼\,se}ˆjÕ<½™5Ïåó¼–£ü?êè\A¯êÜMýUÓuh¼B×;¦_X¼ti—ƒ\@áô"à&àU€í’Â&˜â”µË—v9‘øËä"ààeÀŸ„Åâh¾N›¢ÏÀFš=a4N³éadÍBÍ#ö…ú8ŒÛÃó ³ ÿ4-—b\0 ZH+“Ù¤‡&û3cÛ¦9X±6¾“nË$ûEÉ_¯Œ`ȃ١£¹s{¶íHGwý…[ì«î¯ë“‡Ë¾\7”/êýz±è”sš?ó%è?û"=#µ\yOo0âq/ÏêÃó3ƒ;³~'ËþL"ânÿO20Å ’7¬öêÌkqýGúI½£Abg^@ÀM‘5*1#“Z0|¦#[zsCSî®ÞL-2½ÙuŽrnŸ[YƒHá iÆè·É)¬Œ2îbà|¼Âõ,Oí:3—ÜÿØÔÄÉȲ®÷VòÑPn2µ}¯¯¨ë™¹““Õ“³ÉˆËxTRÓÙøxN‹£ìg6Äþ€?éd„|£Ã 2„C­h•"’À£$æW,PnÁ ¼ˆC: ¨l‹FJ1b-C_3‚Jch‹Éû£n,Gº,+ ”®©ÚAÙåÉÒHœ*:%N%"™öÇÁDAËj@ Xêçï•ÊX’¿Oñ´ôOvZû†Û&÷–z ‡§SÙ¹cz%p0š™txF£ÑrV«!¸Îïß+Ë5_oЫž˜©žKKöŶ/ü¾ÓéËN×09• § ô¬“¹Ü‘S@fš@É^ Èpæ±²ÒÐ ©tË(ÌV€÷‚Co—{”ÀøõϧiڦũWïÕz© i‚—¹”éXŒoøNÚs·Ì¤DŒgÚça Ry[† ¹*3éÚ™ÝéÁ½'·gšÍËíWhÏÀXlêÁð_EFÒaî¿+c.-àJ͘ž95“ŒªæKñ¡^wo€*žh®gt»iù!·’+MÆÉ –UGÁk•´ESEcDƒ!v*øh¡«QÚÒ}Æïç×½˜B 1î½Ã4ž¡!_(îô„ìð#?AäE5óMNPmyƒS{šEÄ¥*†¿›€îw‹ne?%gÚ:Âåªìx9„D^ö"úaý!¦tYCfLM>ònfPÏFÕþÌpï±c‡aÏ¥§Ü®£N¿[ZªSö•€²:•›¥¨©liÓ m Mé4d¨ÎƒL£4²Âz3˜%¦+påfA§‹Ø–û 4_W¡aPá.ååêR&]×–1&w©¨£Ür’†ƒaâñÉ"õm)ÞJ~šÀÜ+ÄI±©±Æã[¨ùBQŒP[„”P’c™bq±¬nш’Šl­•YæiVþ@W'M¨ÿiwûeµOxú¸‡÷îÈ&¦œÞéT4WŸî ú"-ÅÒA)¤¶ÿ®WúÒñ\2íÍì*·ÿ’Ö†Sª¿ýû+ûrÂbB˜|µ#WWˆÏ!¥„HY„¤YìT! 7úBŠYƒÜ/°.„ˆ‚LDN9Lq^Ýœ„^XM‚0È2©`Çâ!4 5A´‡ì³·ˆ[|&Õ¤ëu¯M;2•Þ5½^Lït^ßC×gâÅÀÈÁíïÑÞãùxû½Áâ\v<žüøÔ±·Ã•Løüª‘Ϭ0I@iônù¹ɺ{7£Û» S¡‡š®˜YšÅ­Ž;W:¹kŒé=™Ý'¦ª§f»ø†¯¿¨ïØ;[í-&¿`¹k3‡1œ˜ÔöÍÏ}YÍì€yCYl¼û“ßèø^P@M¸Uò,)b‹µîµ¦â†U{ ¡®:l¹­Ë„i±]Ê´tÆ’$*/{—K¹ú\)º >êó¹R|ÊeñBnëδµU§#êà›¾~˜œ€)쀻¥·Ø:e "±4‚ „ò,fC•†ð„Í2ý½Ñ=GöŒ&¶ÝWÉz*Þl¾  n3{/œ?ò|fÊß‹¬Â`zû0*”€'Ð#/8üŠÒ|!(91ôÀ#åþcÎhÈË".|r*s/á»Þ¯utîtŽ]c-ßÂÉÑp˜jÍv ¸7›'À®Šï÷Æ®ÂÝ>_ÎDâ ¢‚CŠ2ˆ§€CJr¬Ä‘Î9UWLÕÞ2|lóhYtÙ<Ö Û@—3èv)“#¦wó `Ú£9FIçòÓ€ÝEÆøaqÅŠ,«.o/K:¬Ö‚áZ…ö‡Ü;¶™€Æ’tßíþD³iNdªCáíofÓ“® ºÞ~-\Þ—)FL~o¹ýããCñw¡/”Üð¨’ÛrÊŽD`¦‡£CìØ*µšÑ„ ¶VSu l‚]e©©é4)d.V}°S] õ—#›B¹¿®îæUöÊn»d£n‰Ø$I¶¹œîð\÷× ¬!ót‚³k³‡…Ø r÷ªˆÒ„‰D+W)ÎåÙ¤”äË~­\¡Ç÷ Ž«g~sB¨þö¹ë£va}îG>m»Þ~Âøé€w³fïr¨c«8ÕÜfå[MÝ:8K¿$"9 jS $âä܉<Ý€“`ÇÒIà¥7ÚAUÚÏ"š0?y‡+ÓÜwñëhGîxÇeäþÕ 8ÈÁ«ñÁm±9f¡–qxyZàéMžê<Ýàéž~ÀÓ×yZ5;ÆÓƒ8¯œö.]ÆuéÒ-ûVa}I`nÿÎÈÀ`©480Â=§ éñìÃú~·ñפdîŠííÞK!ãTÇGö2Kv“/‘=dy€$óä!rˆ|™!:9JþÅü_Å7¸ÎCwd»æòó?xaùÂðÌ…'Nÿ•/"á endstream endobj 98 0 obj << /Producer (macOS Version 12.6 \(Build 21G115\) Quartz PDFContext) /CreationDate (D:20230201235828Z00'00') /ModDate (D:20230201235828Z00'00') >> endobj xref 0 99 0000000000 65535 f 0000007572 00000 n 0000028821 00000 n 0000000022 00000 n 0000007678 00000 n 0000027575 00000 n 0000008309 00000 n 0000008664 00000 n 0000028968 00000 n 0000044490 00000 n 0000008732 00000 n 0000009089 00000 n 0000009158 00000 n 0000009540 00000 n 0000009609 00000 n 0000009992 00000 n 0000010061 00000 n 0000010420 00000 n 0000010489 00000 n 0000010848 00000 n 0000010917 00000 n 0000011279 00000 n 0000011348 00000 n 0000011710 00000 n 0000011779 00000 n 0000012160 00000 n 0000012229 00000 n 0000012608 00000 n 0000012677 00000 n 0000013035 00000 n 0000013104 00000 n 0000013462 00000 n 0000013531 00000 n 0000013909 00000 n 0000051825 00000 n 0000013978 00000 n 0000014335 00000 n 0000014404 00000 n 0000014761 00000 n 0000014830 00000 n 0000015208 00000 n 0000015277 00000 n 0000015657 00000 n 0000015726 00000 n 0000016082 00000 n 0000016151 00000 n 0000016508 00000 n 0000016577 00000 n 0000016957 00000 n 0000017026 00000 n 0000017382 00000 n 0000017451 00000 n 0000017807 00000 n 0000017876 00000 n 0000018255 00000 n 0000018324 00000 n 0000018704 00000 n 0000018773 00000 n 0000019130 00000 n 0000019199 00000 n 0000019556 00000 n 0000019625 00000 n 0000020003 00000 n 0000020072 00000 n 0000020429 00000 n 0000020498 00000 n 0000020855 00000 n 0000020924 00000 n 0000021302 00000 n 0000021371 00000 n 0000021750 00000 n 0000021819 00000 n 0000022175 00000 n 0000022244 00000 n 0000022601 00000 n 0000022670 00000 n 0000023048 00000 n 0000023117 00000 n 0000023473 00000 n 0000023542 00000 n 0000023898 00000 n 0000023967 00000 n 0000024345 00000 n 0000024414 00000 n 0000024793 00000 n 0000058159 00000 n 0000028784 00000 n 0000024862 00000 n 0000027611 00000 n 0000028904 00000 n 0000029477 00000 n 0000029726 00000 n 0000044902 00000 n 0000045153 00000 n 0000052003 00000 n 0000052257 00000 n 0000058535 00000 n 0000058785 00000 n 0000062995 00000 n trailer << /Size 99 /Root 89 0 R /Info 98 0 R /ID [ <532807e1f403b4fd534de7ff5bd4d3ff> <532807e1f403b4fd534de7ff5bd4d3ff> ] >> startxref 63158 %%EOF open2c-bioframe-4fe9b25/docs/figs/closest0.png000066400000000000000000000521231477525772300212540ustar00rootroot00000000000000‰PNG  IHDR)Ôp;¦ssRGB®ÎéDeXIfMM*‡i  ) Ô”~qT@IDATxíÝ œUeÝÀñ;à ;‚€ ˆlâ–Z)ûfh‰¡ b¡Y.¤¯iYš¥ojš˜¯&j¹¤eš©ifáBš$&‚¬.‰¹›[‰à2ìÌòþþ×9Óe˜f`–ßù|çœg;Ïó=ã\ïžsN*墀 ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( @]hRW:b?P@Ú;vlÓvíÚuxë­·ÖÔæyl[P@P@P@ª/]ý*ÖP@†"0pàÀö½{÷.ÊXóØŸÇzl2Æ>}úL`ý¿äx[·´}I £Ú]ܯ_¿Ïmk›•ÕïÛ·ï—/^üᆠž6lXNfùÌþd¦ï¨ýªzgö{{9î(Ï«€ ( € ( € (Ðð R6ükì¨T I“&{öì™Ó²eËžYYY?c½•ÀÞ¨¨Ø¬Y³‹ŠŠn©´‘* 8³·¯X±bEúwçÉúFªnSú?&;;{Âüùó÷Ÿ>}z~ÒXéþ$é;r[ïÒýÞ^Ž;ÒÅs+ € ( € ( € 4lÍf5ì¡::(O    âĉä¯`}™yûØûû“Ö¯_"¾|fÏvJnnîé³fÍZm%Ëøñã³'Mšt&ùgPn7Òo5jÔ•¤]Àñ ¯g\­æÍ›ãJ/ô籓ô‡º)û¶ç±Ž#ø·,??ÿW9„ôH»žú7Ð÷ƒØ?Ÿ´ÙžLþröO!úþýûïM{H;õõœœœ³gÏžý<û)êýˆòߢlV7Î;÷ÎH#+—ô3IïåáMÚô÷)¶“Y@ÞûôçÇø>Qºß5éȹ\P@P@P@ØîΤÜîäžPz!°€ ØÞÑS‚g»²¿ Û¬'‘ôÇ®\¹²ÛIÔn ¹µË.Œ:êvcÿAÊßE°1‹=òòò¾EíÛ‘Oñ‹û"˜¹õ›4¨qÈÉ´7•ò“¾iãÆwGYÒv¥þÅ”»ŽÃÞ÷Û´iÓØÈË\üñ³8þåÎf=‘ýS'Ož<Ží/©?•z7´nÝú ŽK–2úÓ‹²GP6Úz‘óÜËþ”Û“6/ íº¸Ežý椟Ä6¼Ï±?—¼«¢aÆÛÇ;tè°mÝËñ¯#€ãרœN“H?‰ñNˆq³ã;¼óhëþ8¦½]¢Û^¬_#m‡hëÞ°-£ß5æçuQ@P@P@P`{ ¤ÜÞâžOz @ í]ceev—ã Ìþ»”ƒPæ8òvïÞý¾®]»Æ,¿‹8>*Ê3“ðP6+({{̆lÚ´é·ÉŸÙ­[·"Ÿ@äJÚ/ŠýXHŽ¡íWi÷·”_FÙK8þòСCÓÁ:Š< ÂÉäÿ‹ý'¨Ûíf å¿AÂo)7‹óþý»XcvãZòÖSg5·z¯&­d)«?”½>ÆGÿ¦Î9̽îùçŸ`ä?È[Gà2éSçú ³$ߦÜ}¬=¢aʱAÜ=GŽy#ÙAÅéÇ‘þ‡èÚWð;–ãMÅy“H{ òâ8s¡Ü­ôe1}šHú»7‡•Õï¨SŽ™çv_P@P@P@í%`r{I{ê—ÀžÄÚÞ!ˆVHŒîs\’F~7ÖÞK–,ù Vfù½JþžÌ4܃¢û²?;r ÀÍKŽKoi§;åg&é”}ƒã•ÜúmÅòïO7é>¬a?79N¶Ñ3:KÚ ý9Ò’úI±J·´ñVRˆúM¹ü/Ürþ×»èÙ9éß›ìÿ‡5íC 1‚ŸéÇg€ÛË#¹[ÍPoDq{›™xœùÜsϽyÔ/9gqÙ’ ç(ûóh»WIf©ò¶Ù±T“* € ( € ( € (°] RnfO¢@ý`¶Þ‘Äæ”î5A°’—ÎÏcœÆ À’•Û©;ó¬Èw¨÷1ë^I}‚|»óÌÉ#“ã2¶+i{ß$Û ã–çöü–EçÙ,Xš”+µ]I tŸ$ÀßþÔ[šWc›#ÏŠlKI´·|÷$¨8€m!k2»´Ì>ññ¼„h8³G»Ò‡‡°œ8dÈiëcê–˜pÛönO™ôxhyKz†fqæ~l——Wôšp¬ y³P@P@P@¨ƒ”µãj« Ô+neΉ7FGpÀÙ)ÍNc7T4ÊLc=<^åBŽá¹“s† 3 §“ׇ@_×â6¾O°nhñËy6®]»¶UqzzC0oÁÀC Ð=ôų/͘1ãÃ8®ÊBýèÏñÌälAZ³·£—Ìæ,«òúe¹M{gÚÌnÕªÕÜjý1.£InI»[Ìâ,ÕöÃ¼Øæ¤ÖR÷&ÚØÀØ£ÎÓÔEßš‡Õ˜™Ù¢TÝ-)÷•x)–{Qÿ³ôkVyý® Ç-:`‚ ( € ( € ( €ÛAÀ åv@ö ÔuaXË'8Ï|<›àى̎|®¢~“ÿùs;óh/ÒÆ%Ô;ƒç>æÔûy?a]HÞË×âå2IÐói‚vKH·>³5Ï{|…òoÒÎ79>&ɯʶyóæ?¥^žË¸”`éÔy¿G?­BÝ-úuxåR6¿çvïy(Ÿ£í¯°Î¡ïåÞnõøþ˜rçRguÿIÒÿÅs9é_¼ø'Ÿ´%ôïeö`Ü/²­lÙ‹-¢Í¬ß!ø¹¨¸Âý® ÇÊ:c¾ ( € ( € ( € ( €uN f`2‹²CY#à˜ËÚ¶tÞðáÃ7›I™äGùòÚJÊT¶efçN1›²²r™ùåõ'ÊDýj™Y¾*ûq‹wñ¬ÒÍŠ‡fM7K,瀲KY¢vá\ºXyý¦Î6;–>—Ç ( € ( € ( € ( € (Ð’ e#ºCV@P@P@hdé·Ñ6²1;\P ^ðŒÉÿååAo׋ÎÚIP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P ^ ´5©k½ì¸V@P@P@P@z+]o{nÇP VŠšü³Ù±¼Özìc‡×Ê lTP@P@P@(%`²ˆ‡ 4zÂT“¬¢¢}ó7>ÕâØ‡—´8æ¡ã½‰ ( € ( € ( € (P«)k•ׯ¨ÏEÄ*SÝ‹²²h~Ì#ï5ÿÊC§ÕçÑØwP@P@P@¨»)ëîµ±g Ô¢¬TVÑî©ü¬;šûÈÊVc9¯ŽtÌn( € ( € ( € ( @Èj ãp 4œ‘ lš]tA*•ý2ÿXÓ/ÈJ]G›9•´›—jrýÚG¹¬’rf+ € ( € ( € ( €• ¤¬”È Ô-–Ç<øPaVö˜ºÐ+~üë3o»ÿüùY›êBìƒ ( € ( € ( € ÔOÊfKÕÏQÙk¶ÀË oLvQáÃY©ìgjz¨U›I™ÅLÊìôLÊù5ÝÛS@P@P@P@F'`²Ñ]r\ßL¦oñŽåšÇÆÜXÓãá%9xeÙ¿²²V5Éjr嚇Gý¢¦Ïk{ ( @uú÷ï¿[~~þªùóç;“»:p[YvàÀí»té²zâĉ·²‰Z©VWûU+ƒµQP@P  øâœ~žÛ.UÄó/ÿÊ):}ý#Çv0@¹í¢¶ @Cèׯßá½{÷>¬6Æ9lذv´ýfAAÁ¼¬¬¬#2Ï‘yÞ>}ú\Ó·oß+2óëû~æø* >Ëÿ¥Ë6˜¼˜_­eĈÍ6mÚtÏâÅ‹ù<¨[ ꃖ,Yò“ºÕ+{£€ ( € (°5)·FÍ: 4 ,^ëZ–UTøÕõŽî´þÁã~×(†í P`› ~—b—mn¨ŒÖ¬YÓ‡¶×Ï›7oOÖ)™Ejó¼™çÙQû;j|+V¬8?;;û·uqÖêܹsŸ)**Ú‡€tÏu]<¯ ( € ( @Í”}KgÍ´m+D€™cøâoyîÈ—˜ø²p$_`›Å—†‹Ø~‡¼,ònž3gÎÕ|¹,b6ÇS¤ßCú¥¬-Y¯àËϯ٦hohaaá÷ÉY8Ï4kÖìÌ™3g¾O[çG>y£ÙìËú‹&Mš¼Âñ”]Áþy´?‹ýrÏõ]*ÈN¥²^ÏÍÍþÎê‰Çü­’Òf+ @àwï¡üž½‰avç÷÷4~—‹ßµ+ãw2é…¤ÃïÝϳ’››{:3îNä8>P¦ˆ"{P7—ü3I{ˆí¡ü¾5{öì·ƒŽ2W“þŸŒãd)ë³€YshïNÊt`FàK|n|.)ÏçÊi™çe?ÅÚôb}–óNjݺõiÓ§OϧnGêÝÆz8ë2Ö³ikÛÍú¶'uo%që#¬mYÇÓ×WÈ;”¾TÙeÖ¬YëÊ;ïØ±c›0ð6ÎõÚÿˆ¾ÞÂ9®e¿d)=¾œœœ±þuŽ¡P Ö§Ú´iã[]\édÎw2måq|ímÐ¥^•>+‡ºËºuëÎâs¾Îù™|€kñ3Æy×¥/û·r={;¸Q@P@¨')ëÉ…ª«ÝäKd¾¸ÜÆ— oÓÇ×øbp7ÛöÑ_ò¾Î— q|=–Ã\ÊÝÁw‡iìÏ!½uâËÓhêìMÚý|™º€d»7N&ÿ‡ìÿ`Æ ×rmŽ mWÖ3ø2r4uš‘öÛ¿‘v4ûcÙÿÛY—|—J² šì¿~Ò¨å*)g¶ 4|ªñ;v¿wÏe}Šßã?c½‘_¿“ù~éãHû'ÇO4K òüÞ>Žô)­Zµz`õêÕWR~ë™|¼Ãïê.ÇpüËÎq ñ7 ¸mP4hP·²> 2Ž¢½ ¨{N:Ù–,eœ÷³dK?Ž¥oÿá¼S÷«¤ÝO¿ï`û u /G‘wǽX7[¨L{…ògQ&Æ}ç½zk\¨ûûòλtéÒNîÛ²e˽ îÆygñ¬Å‡ l."=½”_^^Þ¹dÄìúà·3ãx„ñÀqŒ-–øCßá´ÕŸíDúÜ-“¥ªŸ•ëׯïM/ô+yö'mE›'²öfLÙ.$ÁÒÁÔH?›µõ²èÛ™¤ç“ÁÞèï¤G~'êÞI½°Ÿb¼-¸æW³{kGò^¢ÜiœwíðáÃ[­Zµê·¤÷$­ˆ¼›6mzÀŒsüñòo¤¥ŸÑÌõYA‘#ÝEP@P ~ x»wýº^u®·|18*¾Hð%ãÖWè`z6dt”/ ãØü¦[·n/³ÆK o%m$ÛôÂþ5ܦµ/ 1;%/`ù‚2†ôWIûm|ùàËÆ%9frD%Îõuf’ÿ4ûïtû¯Qî1Ê Œ2lDZ)÷¼QÆ¥|u(ËÏ5G“¾ãïÂîÝ»ß×µk×÷ù]{ÇGe<¬ÊÉüþiOð{¹{Ìd#¿‹ó˜Õ·>ʲ?)>'Šg»G0ÚM-[¶ì lÞHfUFZ,å} Ý™ìOh/?fs¦ ÿSÎy¤ÜßⳆsþ…z{2dg¶#9¾ŒÁ¬`lw³ÿA´ÍžáH 4þ0v(—Qÿ­-Z\© ãt[ãRÑyù,åTE» ü<Ø×:tè°{f€2ÎYz|é$x ö’1¼F¢lñrs|>²Æú"˜Ð+Y(;Žƒª|Vî>IE^X´7ÇS0ømíÑ£Ç>´54òÉ‹€æ¹|žÁõîK¹ó¹f¿<ŽÏ"ï3¬ûôìÙó ÊLò)K÷‰|®ù¥´¹2Ú5jÔ$­à8±©•+WŽf“OýÉé{ì±GŒ;½öíîÌùwzþùç—Rîª$Ï­ ( € ( @ýp&eý¹Vuµ§1#r^Fçf'û|aèÎþO¹…-nc|Qû±ðe÷?Ÿî¥ÿ]M^nÔ¡ÜÌ$/—oðÅq%39âvÁ¨ÿn’Çv-eÿÇ| ÚÀ~úç9Ú ©ÜóFyP@Êø}Úµ7¿Ç?HJÇïrf½íÁ¬ÉHúwFúös“ãÌ-A¥·’c‚k“ HݳùÝýUÚûS’—lã÷8éå~$å*ÛÒFIp6?¤| fèÇŒÂ,Ž_d\™M ã þØ–^˜™¸õ—$ÁÐ3f|ÈçÑ›‘IÝn¬Õr©è¼í~M_ÑôÌÜ€×ïxAÐ%qkzº3eüC`3>NÀñ0¶qÛ}¬ñÁôB°Ä„9äua»èÓÜôº³_ég%çéA¹’ÏkŽãVþ§¦?ÏyÛw}H7K?F°“Ëõ½)Ò(Ÿý{±eÃs޳²6„½,êPn)ž³ÙFûo°Ž¤ÜÔ»}Ò¤I¦vgí;,3Èû1yw²?àìÔÒo§í÷)m½\P@P@Ꟁ3)ëß5«S=æKÁ<¾”tŠã’™(ì¯â‹ÖÙ|‘Ù)Ö]Xx^Ö‘IY¾œ¦g¤$ÇÅÛ•´·ƒ¥—â™,í¹õ;fÄì•r¿°}Z# ­ð¼I9· ( € ð{üCÖiÉïñØdê̬¾t𼢊[ø4—ßë”J/Å3'óûþvòK‚áé ÿQ@P@¨W)ëÕåª{åKÞ“|Aªç \Ìx8%£—ñrœSãYR‘ÆÛAïäK×åù[ìòåd_h0`@÷Èä‹ÈIlÅ –8®âRíóV±]‹) €J€ßáÓX[|càÜš;† ÓfùUv'ÆZêµ.‹`ÒýâΣ̛Üê½Yð,êlÃgA…ç¶ùLŠ Û>_N㸠›çþ‹Ï°xbÉ/ ¡³~gĈÍÈø6káb†`µ]*:/3Oã–æ?ÅíñÜZþ'Nñ}Œs–^JÆG~< r åÿAï‹—\ GF帚²Ÿãøoqœ±Té³’z13qŸ¤c‰öFð<Ñ´ÿqë~rÞ§ÙÌѯôBù|‚ˆ…Iýò¶´9¼þ<Çô…¨¸óÎ;¿JÝtp“sôä箳ZŸ%`y}º—ò$m=ùä“{²ÿðUƒn·'ynP@P@ê€AÊús­êdOŸ}öÙ|Q¸/›ÐÁy¬ïqœž%Á—Ð —¿åÌxx…/mX¯¬h |/™IþÕÜFø _ߤ­orœ~Eõ2ó¶æ¼™õÝW@øT€Ù…/°w1ºüN~‘ð—ð{ùŒŠnCŽš‘þÎæ:êü(ŽK/<§øIÒö¤\ä¶X¶ö³ ²óƉŠf'ó¹uý{ƒÇ‰Ìâ³é‚_ ¶èH*õ}Æ{Üûï¿¿œ¼b~Ÿq[ãRÉyï¦ÝB>+_c}ó䬻¯tJïú}å§3kò!ÊNá8LŽzŒ¯G\3¶qÇÃ0]œÙ^U?+ùcd)÷£tÀ±ÿ•ýÇxáÑ_âÜ샾§gÊbAÊ;x¶ærÎýwòãöùÌ?^fva³}ÆÏ îN0ò]êþ í,ú¾"ý Î1ƒö¦’÷gÒ÷騱c‰ã?€2éÛ¼Ù?„Ÿ×é›5î ( € ( € 4|fhô`†CÌÞH/ì_ZŠÓfÜ´NfSf¦W´Ï—\ÚîPQ™Êò¶æ¼•µYò[óð¹ÍG?\ÛºÐû € _ ÞÂ]ÝßÉünõÊÒ‰79ó{þí˜ÅXV~’¶5Ÿ7i7ÙÆKÙn¥ƒoIZ²tÎ*í¥g ÆçÇkbÖbRfk\¢nyç¾'·—'ç(½Í_q“ç6–.š¢l»dÆã™Å ”©ô3šq?Ìçû¨Ì6ºfsÛGÉ736s(¿'éq wµ–˜ I½Ì•Ô'¯sYã¡üCü¿Gµþ YÒ¨; ( € ( €uF Ìÿ1¯3½³#u^€/-™Ý³>~Ëot=‹ÙçpKÖä:ßùzÚÁNd¥nØôÜ¥©‚b’Š‹õ^ÀÏ¢z «>‚W'1îd>;^eVÞyU¯¹ýKøº‡³æÐ×g ÆmÍËèóéÛ¿';öŒ|ÖÇK„~ÃØ¿=áøg|Ö/æ:~Äá×Ù™šîˆ^Æ£˜9o2?rGœßs* € ( € Ôœ@ò ¡škÑ–•_ Öò…³/_Þ†3ðø3ŠåÂF…°[X”óð¦™ÝЭËn©}Gl6±e;÷ÄÓ)°mo¾ôljÑË3¶­k×;[ïÓé‡ùܸ£®wžÙœÁíLJÒÏψ»ö¨£Žú+ººÞíïŸõñÌÎßŬIž!ú o×~”ÀàøÌïÁK>÷Ÿ`[ãç­Jƒô£ å¼³ *X–Q@P@ê¸ÀŽù?Ê:Žb÷¨E#N¾(uÔ)׃®ÚEʘòû«RSïùYdúYT6‘© ( € ( € ( @£ðÅ9æR;PP@P@P@P@ꦀAʺy]ì• ( € ( € ( € ( €FÀ e£¹ÔTP@P@P@P@º)à‹sêæu©/½jKG?__:k?P Î |¡Îö¬îuìEºôqÝë–=R@P@P@¶MÀ å¶ù5öÚ œÞØ¿ l³Àômn¡ñ40Œ¡>Óx†ëHP@P@P ±¤l,WºvÆ3z†ÕNÓ¶Z‰ÀôJòÍV > «OÝÁ}ß». ( € ( € ( @ƒ0HÙà.évPÜr茞íJîÉhþi—ÕA) € ( € ( €UðÅ9U·²¤ ( € ( € ( € ( € Ô‚@V-´i“ (PûE½>;$µ÷ç†Öþ™<ƒµ$ðæKϦ½<#Z÷³¨–ŒmVP@P@¨/~1¬/WÊ~*°¹@Ñæ‡)P¯ü,ª×—ÏÎ+ € ( € ( € ( € ( €;X OŸ>3z÷î½bw£ÆO?~üøZy,Nmµ[“\ÓÓ¸¦ï°þ¨&Û-¯­iÂXÿȺ¶_¿~=ÊëŸé ( € ( €µ/P+ÿó]ûÝö ( € (PWæÍ›7¤®ô¥¦úAÐêÀÉ,5Õ^ÒA¿KüñÿIŽëê–kú;úöËíѿڲ®jßë‰EEEÿ¬jyË) € ( € ÔŽ€·ØÕŽ«­* € (Ðà"˜D0çÆ¬¬¬Ï0¸·Y?ÊÍÍ=aÖ¬Y«¾­ÊÎξ¥°°p0é])óW‚?ßò.N›Dýîäõfûìüùó¿3lذvyyy7“ß5¼gzôèqáĉ7r¾»IkFÙ¤_Ïö+wá<‡Î;÷-ö·iaæ\ú{Ä#4š²Î¢ÏçÐßK9ßñwåœéàÇ«Éûi1ž½Ø„C{¶ÍYo!ï¶Ž•ñL§½½©·íûQž±<ÊX~û5µÐ¿ý8ÇÏ9GÚìÌþõôïÎ+Çû²>@ÞÙl;‘w'y?`?5|øðV+W®¼’´çZÊta{#×iBäo˲ Öåþì”w ´ëÆ'Óÿ¿Ðç½Oòç³ë”Gß¾} ÿš#ù…l÷nÒ¤ÉAsæÌY²-ã´® ( € ( ÀÖ 8“rëí¬©€ ( @£;vlñ#¨vÿ.»ìÒ`O_޳ Ú#ìÌv1­ÃÛ´iÁÌ/öïß?‚™)ÒÆ°9Ÿ´o°ý ÛCØŽfM­Y³&f~°ë®»4jÔ¨h³ÓÒ¥Ky”‹ÀåD‚H§²Y‹-Žaÿ ökdæ&}ÿ1í_ÍX(ŒsÝÆý½‚€Õ8vç²? Vʤ”¤¥ß;999§“6ˆrÃèÏUÉíÊ•òÃð»‡&&$íÖt€’ëÔ£‰œçbÎqhóæÍ¦ç Ü—óŸÅþgX÷éÙ³çA˜¦/§@Ü'ƵjÕªë¨Ûš1 ¢l?öé5±l­uEžå]‡™3gFøce w1–®ìgÜé`0ÁÍ–ìO%íwüÌÌ58„r'qQ@P@v¤€AÊ©ï¹P@¨'#¸Õì裾cêÔ©¢Û¹NmÙ²e2£ñC‚=wFúôéÓ×ôY@ù=ã8YH{‘ ÓrÖMÑÆF:eN`ÿöh“@_!I1còè¤çxšzq äÒÙ÷Љé~s›÷;Šò‹QPj0ô‰:e.4gFÁ¡nÌJ|/)DÀ¨ i9ÉqÆ6nɮх`é}ÌÎÄùælüÚâÅ‹çÄLÄ8 AÈ8_YýHœü.y×QïÖõìgs{q¹½d¬”KqžrÛüm]èOS 7°ÞNÀñ¶âuçý{Ò6·×gäV’ž¾NÔiÕ®]»EI9êÖØc¶Ö:éKæ6ñ¬ì:`Q2N~NW'mÞŠý%DZeì56ÖÌvÝW@P@¨º€Aʪ[YRP@F+@ ñ߉Y‡Ç%ìÏÿKŽ·rû4¾qQ—h6Á´˜Y9=Žk{‰ç$vêÔ铘QGmçËZ¶lY»8/·eÛ­[·îT²Þ¤¿ÆáfÒ¿G½¥¿J;É]ÑX£]ÊÇ3)¿A¹…lÿM€ö?l¿ÎZ#K¼pˆ@r¼­:Æõ1Æ pV˜‹¾W¨<—2—зSh£ûSÛ™¿Àõz„ã­^¶Öº"ÏŠ®CEåvö·±ùÑÚµkïg3€ 0zˆõσðÜsÏåUTß<P@P@P@P@: @à¨c¬5Ù•xË7këšl³*mÅ Lu.¯lÌ $`·{é|ZYÔ‹·goÕ‚_§Úoô;™ ZNÒ·¶1¾êÔ©JÙ­µ®¨ím½C† Ù¹¢öÍS@P@P@¨†À¸çATî­.]º´àËjÏj4iQê„Á’\n)n_':c'P@P@P@jM ÆÿJ^k=µa¡š¸…2ý̬ÒÃçÖ½¸Ýpë/ÉK^N·õ}uÁ‚‰ò˜$ÿ9vwc-âÖ¸Xoã!e߉|jK€[(§ò³øå²ÚoÖ¬Ùn6lˆ[\ËZöç¶Ò×"0É-ÀwQàÖ¸E5ÞN|>?»÷²ï¢€ ( € ( € (ÐÀ|&e» §a ð„N¼m6ý24ky^Úx®W%SmÛ¶múÁüƒ—;\K òR’Zz€r²ß,Êp<•ÍG¬‡øyïCGþï^N'Øóç(ã²¥/xƒóeätÄüäÅG°ÍÂî"¶äç×ÝÌsëâÙ|Eåž"=ž5—¾l¯Àü×l#X|(×è&v»Svõ¾•<÷.òâ2räÈ£.\˜þCÏê[ʘOíÖ­Û31Ö+V´ H»ù@|ÉÂóôâùp)”×âùŸæÍ›ïχ÷ÇÏ`ù ?»/–TpGP@P@P A¤l—ÑA4Tâ€M:hC&Eà,ŸÀצ/³,[ðŠ Ðââ´{õê5²]»vç°m¶hÑ¢ˆµd}?”lS̰¼‹v xÄëqì²¥Ê8ßí·É}àâÝlÓ·“÷ueã KZ.åî h6ý9¤÷¢Îɬ£©³7i÷sî‹räM"Hw.ëSÔùë…¤_ÀÚ`ÞÒ\˜ .~v1(H<‡/Õ²eËü$-)›±m‹å[É ,ÏÁ(våÍĄ̀ê® ( € ( € ( @}0HYß®˜ýU X€ÀãÇÁž!hs+Û+HžÆ-à?ç­¥×&HÅÆ“;ùqø\Òï$ØsW’ïvKŒG{ §"»˜ ùãØÇp›ß0#ðå8f–ë­¤dwN³ õâ½ ©——››Ûÿ¡¤/ìÞ½{,SË—/¿ˆ ñì6è eŒµ²…7%ÃiuRŽŸ×UÌ’üS¾»'É?œÃG¹&“™}švNÊ»U@P@P@h8éÛHÎp‰K€@åaoÎfÔ+Y'ø5—YkLˆéÜAþŽg°íÃz'ùïí·ß~’2n·ˆ‘ó2Rg'û»³ÿSn_þ VÊýǃ“|k™³üVS>fQvcíÔ!ðö*õö䙋{$õë—Œ}t² þbbA°ýyœ`ý3ë(ÊÎæg÷Q‚–1;ØEP@P@P  8“²]P‡Ó¸â­Ý*c¦ß¯ âdĹží9rn#ýéÈÛdÉ2|ðf«=Ìm¶÷r"—RÄæaøõ$™ã9N²¿ŠõJfûÝ #FŒhÆlÀôíøqL²äç8Ž…ò²™Æu8*À?ÜîÜzúôé%3“ôƶåçð„gŸ}vEYãæg8ç·È»2VŽ÷ã:<Èþ9¬W³º( € ( € ( € 4 gR6 ‹éP—ÉkvÛm·’™{ÊL~…5ìqðàÁmÈ_C¹~‰Ì /¼/ÒyŠü}“4·› ð¢–' † âY“} Œu$÷”ŒñrœS‡Þ*ÒxÌ«W¯¾<#‹]ÊOc=¼ÿþñœÊT¼”'//oJÿH´…Ö§ üågôc.ÁžI~¶_#í.ŽLÒÜ* € ( € ( € 4ƒ” çZ:’F&@À&ž‡Øš@ÚŸ“ oï>†VÜv|_ñ GÞ§Ìc¤÷ ‚>°Æ:‹Õ¥ ˜Ù‡í…ÜzϤŒÛ¾ßãxcÅu›OV­Zµœàï+ضa™~å.Ì |Ì‹¹×êEf[^B{g0“2¿ÜJ$cíÚµ9cÇŽm’¹â™5uêÔ lÿÆ5øAÝô£ òîFÚ ÐÌh$<SP@P@hTÎäiT—ÛÁ6$n…]ÌíÛÿÃíÛ·¬\¹2XÜ“\HìRžç÷jŒuÆ }›5kÏö{ƒ@e2v³æôìÙóf¦5$Ž A±Ã\ìØ=žãž±ë'lFÇíÚM›6-zòÉ'×Dz,xvOïÿÃqä˜ý_ˆ»qÙ²eíxNhsÞ¼yS’sdž·OŸ>×PfÃܹs/Mò·fK t8í\VTTÔ‹m!ÛYÙÙÙ—ÒîBÎ1•ã/—Õn³fÍv›9sæûÕ'èÙdñâÅùeÔ»™é}ûöÝãã8ï¯2ÓKïs¾ëH[CýËÊÈ{—1†Ùë¥ó*:fœ¿`Ì÷Í™3g^Eåj"Ϭ#<²å“O>¹¦&ÚÛžmð³Ù|õêÕ¶nÝzôôéÓ˺®Û³;žKP@¨wÙõ®ÇvXP@ê´Êï ëR\³fMÚ^O mÏÌeœ«¦ÏKÐs$ÍþÀÙ%={öìÜ£GnœûyŽ$ ÕzäÈ‘G“ž+éo7iÒä‹Éq(+«ŸøÜ+©ÛQ£F Nò’-ç<¬°°pDr¼½¶ÌXý çêXÕåøñã·úÿ- †^ÀúâªU«þZl·½†Yr‚Á£ô.a½¡$±Š;&×Sô~~FÏ®b‹) € ( € d8“2Ã]P@Ø\€ Í¡Çn"µ;¸iÔ¾EÀj%éç“^HÚ1Ð>ÏvJnnîé›6m:‘ã)ŸGÙÿ¥Èìç’&é±=”`Þ¨Ù³g¿g¢«I‰€ãã8YR ¥î÷É;Œ´g˜™xf~~~'Ò&sÜô7™-ø¹¤<Á­ÓH+9/ûŸ%/fv‹}Î;‰n§Å 7PI¿õpÖe¬gÓÖ ¶›-´9…º‘wkf}>®U«V£­’tʾÅ9Nb¦ã3iÖße—]òŠgRvãË“z¥·ƒî¼~ýú¹¤ïÄ9ÁêdÎw }»´®¬¯czfc&%e:“·éTýÁÔ‹’W2“²¼ëJÍÎó8 ·”oV¨ø€²²{ e*+¿¢´¸œ1¾Ä5ê¹£g!bó ~ÎúrM¾_QŸËÊ>|x«•+W¾IÞþÔÿ“çøïàB®Í³e•7MP@Pà¿9ÿÝuOP@ø¯@óvM"Èr.ëSÌTükÆ. }W`§‘>Ž´rüʱ*ÿ¸qãÆãHŸB ïn½’òãXÏ$öÁŸ.ÇpüËâÛ¿™““Ó›ã’eРAÝhc2mþàä6lØp-ÇwÀE{Pðœt–T`§ŒóFòXúq,íü‡ó>Nݯ’v?ý¾ƒí'Ô9€¾EÞ]÷bÝl¡^êoqÛ4ȇ6+XÎAeõcüÅUÇ[™4Ã9"ˆûIr|ÄGüûñÇ¿œ~~…6¿ËuÙ‹í¯(³+—0ž \ƒÿ£|úÖsòŽÁçdò–²ÿ'êþ“¼»’ö*º®I™ŒíPœÂ-½D ’6oäœ1ÃòmÖÈ?ë³gíJûϳMQf5Ë/Å~qðîZvG³®`ͧ?&x÷m^¼nݺ¯Q>nåŸAýyt}‰rå.”‹ t?ÖûXÇQ¿YŒ—Ù¨&Nœ¸‘üýHû9imÈïÌþõôçöSäíÅ&ÆÑžm<: ±ñs±ÙÏ!]²dÉ(÷®ûS‘IÝsØœJÚÚÎf{-uŒ¼¸Mñ¼Îµ‰Ÿ¿L>ÊXÞ‹<P@P@жú–œŠ›5WP@ê»–ãÃÂîÝ»ß×µk×÷ ¶\Äqæ,¹G$MfÆØ¿H‚`M÷Y³f­c#Á›¼âÛ_SìO"ˆóeg±AÂh7µlÙ²/°y#™Ui±ðC¹Wi÷·Ü6½Œó^Âñ— ÄíLö'ìçÓVIP/ê”sÞ)÷7‚K 9ç_¨·wÌØc;’ã˺t鲂±ÝÍþ;|‹v’%‚Sìw ïã$­:ÛêÔçÇP<-cm›y®˜IŸóHÛ³óÚ´i³’k3„qÍmÚ´éêÏ'¯SF§÷Ø¿@Þ}Ô›‘—ªÂuM'mn*¶Mé1êßÏ,Ðî´ß—ü,®K[úu×iÇsÙ+ùé%i)fF°º#éCÈûü\ÅìÜ)Üþý:}‰@c{fB¦Ž?á,áË0ònaŒIq5çö’ÿ/&í ^8t*é9!KØq 8çéÃÏm¼¸éVÆ?GýYKÚÝ›ôôíêÔYÃmK2ÝQ@P@(W ²/åV4Ch ñ…ú¬Ýª1¾˜´ëêjÔ±¨u^€c/`¹˜r Øþ‹ S}ΈÀÁ—rûOíï‹®§N:XUº`·nÝžäVÚßS.ý“ÒùD”fÒþÕÌX|…6Þãœë Å-¹.•7*Ç,@ÚŽ—ÊÜGÛßâ6àxÞã œ”nœñ¿NÙx‹öE“'O¾•üøÿ¦'9> ƒJÿ{¯¬~¼JŸ³¼c„/q>Kâ6øã09ýÙô%‡ýÇØIfFr)v/|mGÙçx~âfÎ]×Òç§í—Y?Cúßc,çŒçgÞ…ÝÕ¤oä<ëØžAþûMW’ý|“í|~\ÚñBœô½ÉmþRöN®û[Ô@ñδs-y/r|)u"к'ûñ|ÍÄžÎÏÁ‹±_ÙÂyþmÒ^Ú½’zÓXãÍññ¦ù{éËÇ´ìÕ8FÖRî×”¿™¼ï…ǯr‹xÌêœ/~V¸F§’þ'Ú_Hàóàwß}7S?Û^Î~¼¬çò¤N\SÆØ«mÛ¶ÿˆ4òž`,§°û—¤Œ[P@P@P@ª"3§Š&±~P…õ¯”‰ò¬×U¥qË(PŠgu¨Nßc]yA¸¦äy;f1VÔf‚bv\EeJçUtÞÒe‡º A¤Ínå-]&9¦ÝÖ#FŒh–Ww»­õã|ͲÃ.9wØDZrœ¹ ;ÎAÊr—ª\WÚù:¼ß—n„ôޱ–Nã˜AI€0nyÞb‰þ“ߥ¼Ÿ-*T’@ß^ç\ÜìZžEô%™Ý™Ù\\ûÁƒ·ÉL«ê>çk[ÖÏ/ý9‘õžª¶c9P@P@ÿ TéÌÿ[Ü=P A ÄË%^?–[*ï®Æ0Ï¥ì]<ŽÍÁ¬¯°º( @9ŒNbÛÉ1s}ç•SÌä:"<®Ùt®×IÌN|k{w‹€_Ü–Ý£ôy™ù(3;WE’™Šƒbgé2;â˜àå³ôíÄÒo¬ß}ñœ ( € ( @}(ó¯ïõmöW¨! L“juE5»Œò¼©!n-yl5›°¸F€e¼Äåa‚_ÿÛh]J€°ˆç+Æ-Ñ]wÄ08ÎݱôJzú‘El/íСC¥·Þo¾Ï,DÈh±IDAT7˜¿½=Îç9P@P@P@¦À†Ux·nóð²j¯7ÿ÷¶ïxö˜‹ ( € ( € ( € TCÀÛ½«eQh°ñ»ðùN¼¼8ÞØ~}n5‡¥Î:‡—G°Ù—õ#VP@P@P@¨‚€·{WÉ" (ÐàNf„ý.短 P†ND9ÁÊ/Õ]Ù\Éꢀ ( € ( € ( €Up&e¡,V¦@[R?_fމ ÔxSî½}R©O±³­¿D·rÛ8›³Xß`uQ &^¤1žHࢀ ( € ( € 4,mý>Þ°4Mu¾@…éÕ­dyê¢À4:E r›—OŠÛùÏ6·d ”)0ŒÔgÊÌ1QP@P@¨Ç)ëñÅ«]w&e¸va›îî–Ju{‰fjêâ5´U|¿÷ÙÇ\º(PSΤ¬)IÛQ@P@P@:%PSßÉëÔ ìŒ (P ){ßoøçkÕ¨T^Ñ5dôe}'•ЏgoÖVP@P@P@¨@ÀçT€c– 4 ûåÜŸòÏúîÚ @/ûþ6«Ê0µ P@P@P@†/`²á_cG¨€ D@ñ‡S·T\®ÒÜ×þÛÆïØUi ( € ( € ( € ( @ZÀÛ½ýAP@>x¸M*ul<ð¯ãVŠM½©Ô*6û°®ÜÊf¬¦€ ( € ( € ( @£p&e£»äXÊøQ^*•ÿ³r2+KþPÆr!«Ê4…ÿ4>}úÌèÝ»÷І6ÞñãÇ×Êÿ'ÕV»5éÏ5=kúëj²]ÛR@P@P@P@Ê~Ù„çIÎcý¸ërÊîÊJóϳ:C½rgK4@†¤$Hw 딚¾T8]Ò·oßoÕt»µÑ}½Ð emÈÚ¦ ( € ( @Y~™.KÅ4h¬q§÷¿F¤R;ÅÛtªºü/y;x¼$'^ìýBUëYNú&»¢¢¢³²²>Cßßfý(77÷„Y³f­"˜µ*;;û–ÂÂÂÁ¤w¥Ì_çÍ›/J‘÷pqÚ$êw'¯7ÛgçÏŸÿaƵËËË»™ü~¬yä=Ó£G 'Nœ¸‘óÝMZ3Ê$ýz¶_Ḡç9tîܹo±¿MK¿~ýúÐß›h$þÈДu}>‡þ^ÊùŽç¸+çü'ÛÇ«ÉûRì“¿›ph϶9ë-äÝÁ¶Â±2žé´·7õ6°}?Ê3–GËÖNâŽ&¶Xèß~œã眃§X¤:³=ý»…óßÊñ¾¬w6ÛNäÝIÞØO >¼ÕÊ•+¯$-ƹ–2]ØÞÈušù. ( € ( € Ô¦@­ÜÆT›¶mP > í«¦òOñ­Û•žê%JÜþi©_±1@Y©˜ê«Àرc#ˆ÷AµûwÙe—î¶"(ŸUPPжxL;³]L@ëð6mÚD0ó‹ýû÷`fŠ´1lÎ'ílÂö¶£YSkÖ¬ù6ìºë®5*Úì´téÒFå"p9‘ Ù©ì_Ö¢E‹cØ‚ý!‘¿­ }ÿ1m\ÍX(ŒsÝmÒß+š4i2ŽÝ¹ìˆ•2é%i)Æ÷NNNÎé¤ ¢Ü0úsUr wEc¥ü0ü I»5 ä:5Áh"繘sÚ¼yóƒéß¹(÷åüg±ÿÖ}zöìyæƒéË)kã9º©U«V]GÝÖŒieû±Ïß_\P@P@Ø>)·³gQ@ú#p#]]>’:Taýe S©ÿ°¹”ÕE+@à0‚[ÍŽ>úè;¦Nº!JëÔ–-[&3?$àvg¤OŸ>}=®”ß3Ž“…´ œ-gÝDml¤Sæöo6 ôñŸS*fLÆ{¨Ò çxšzq0gÆŒ²ý˜ü˜ÖÄ2‘¶&pûõÕêŽdçUi4Æ—ŸŸ¿¿Ó™‰y urgΜÙ"³nYcÍ̯­ý%K–ôbL]À~—•·¯_¿þœký9 ÎÉvAÖ˘©ZðüóÏ/%i6kÖ¸£¹¿œ={ö'ÅÇéëû. ( € ( € Ô¶@NmŸÀöP@z&°žþŽãÞÏ/åW½ã£èÇU/nIê¥@.½~¯8˜·y¿“1’xäA沑ƒ¨SæB@sfdëF ò½¤A´6þÊúÿ“¸%»F‚¥÷ 2d*¼ÃéÇ×/^|53{G d})«)‚“ߥüq¬¿¦Cѯì7–ÐKÆglå¶ùۺЧ¦ˆ¤ÛÙ&f·qÞ%IÛÜ^×&YâE_éëDùVíÚµ[”d°ÌŠþ&ÇnP@P@¨MgRÖ¦®m+ @}xšŽÇm U]§Õ×Úoª*ÀíͯP¶³Kê 8°× AƒvMŽ·rû4¾qQ7n™&(3+§Çqm/ñLÊN:}­Í°Çù²–-[Ö.ÎË-ÏËøõå–õâ8¶eÛ­[·îT²Þ¤¿ÆáfÒ¿G½¥¿J;É]ÑX£]ÊÇ3)¿A¹…lÿM€6ñuÖYâ…C’Oä<1®˜á/ÀYM9ú^Y ò\Ê\BßN¡xâÅÆv&Ç/p½áØEP@P@P@P@º!@Ъc¬5Ù›xË7këšl³*mÅ ܹ¼²1ƒ’€Ýî¥ó üeQ/Þž½U ~j{¼Ñïd&hu:IßÚÆøªSDz ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €Ä‹¶"^±5/›ØÚóYOP@P@P@Æ.à›ûO€ãW  Dp‘·Ùþ„!}ýÖYYYØNêÙ³çï¾ûn³õë×RÖp)÷÷yóæ}aРA»nܸñW”B½¶ËÉûy÷D=Ÿ±û™KNNΞ³gÏ~;3­¦÷ûôé³8;;{Ìœ9s^ªé¶mOP@P@P@-½£;àùP@š @y;mÞ´iÓáóçÏ߃ ^_Ž\²dÉ„çž{.`eN¬‡¾"99räaÌœÜmÆ 3È{¹Y³f{Gý&Mš|`å´{hÒGò”ÔK¶µ LÎíVP@P@P@†*ÓPæ¸P q <¸ AÆS[´hÑùÙgŸ]£gÖáJf?žÄîçãxâĉ1;2E@² ??¿ä˜ôÈ£Èzkîܹ?2±Pé# V~øiJ*E²0i'I+½åœQî"œÈÉþsô댤_ô,,,¼‰¼îäM#˜ú­èëÀ[lÚ´éÔ;†¼¬OµiÓæ´éÓ§¯f¿daVåÍl`†çKÝQ@P@P@P  ¤¬ÇÏ®+ ÀPö&¸÷NLr˜ùû±V¸4ìC¥ ´œ™™Æ9úd—¤`\ÀLÊ—“ãØ’ÖœöN$ÇýIºzíÚµ·±C³#i“(s.ëS?c½¼ ¸Õü¶û²öáò ¤>²zõê8¾ƒ5½ ¼Œƒiãˆâ$7 ( € ( € ( € Ô{o÷®÷—Ð( @±Àîl?ÞZ Š»³~T…úý@ž–¬Ó³4K×£­f`^Nô‚‘×pæ¼ ™a™~Q·r¿Á ÈuË—/ïFz¬½yNæIÚŒóìÁùóÃf[ƶôXçg”‹gÛuëÖíÆ¶äô$ß­ ( € ( € ( €õUÀ™”õõÊÙoØL€Y‰¯‘C0°_f·f"ø÷&Ï¡Ü)3½ô>Ãxköà#F4ËÌã웸åú™iUÜï:~üøôïØ@Ò~+ïtüuÎ’µuëÖgÍšõù·’ÇdËìØ)ÙƒóÌ`ÍJÎGÞɬ7qo wQ@P@P@P Á¤l0—Ò(иx™ÍFxñlÇ{˜9¾xί`÷÷ɬÆH/kéÑ£Çäÿ{ÅŠ7ÆKx† –C;chóÚ¸¥¬:•¤µ›2eJú¹‘:¿FÙ9q‹6mMc=œ éÞQ?Α——7'Îǹ:“4…YŸ‹ ´+å¾ÈqÉŒwò?âvð«HëÉØâ…@. ( € ( € ( € 4ƒ” â2:f&ÞÀæžÝøWfT¾Gï1{áYçV&oìæYLì´~ýúEߣó¨?Žàâ“•Õ/O½ÿPÿZnÝ~“ýoæææžeèã l.fÖäò^¤Ì%äŸÁíäù¤_CŸ¯ ïÓ l>ÄñŽÓÁLöÓ 3.×±ó}f‡þ|È!;'»Q@P@P@P@P@º&À Å[Û§¸M›™í¶¶>³ûhŒÛÏÓÏ´,«^¢Ó¤¬>”ÌŠ7€—UÇ4P@P@P@P@P J™AÊ*U° ( € ( € ( €\ÀÛ½ù€ÃW@šàVì%´úãšoÙP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@¶Màÿ‰Û­…·Ï¨IEND®B`‚open2c-bioframe-4fe9b25/docs/figs/closest1.png000066400000000000000000001554051477525772300212640ustar00rootroot00000000000000‰PNG  IHDR)Iw´¨ZsRGB®ÎéDeXIfMM*‡i  ) Iv´AP@IDATxì|TUÚ‡oIˆDDš°ê¢.J¯é(«¸ ¬k]¿E¬ˆ²XVÄEEYׂme)*,Q tÅb#€‚ Ô„„„”ïy‡¹q2$“dRf’üÏÃéïyÏ3“;ç¾÷œsGND@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@ŠG sçν:vìø‘Õ&|ÿ@ –Ô?»C‡}ÕQ™ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@ñÔ,^5ÕêC &&fÚÁƒs8;;{\DDÄÜ@uT&" " " " " " " "P<2R“jUA¬„ʰîÇ×ÍÉÉ™ãåÈÈÈÈ,ÒÓ:uê4*77w2¾é%qqqcSSS‡“î‹ïJynÍš5ç:tè1Òƒ©ë­wEBBB*+2—?‹¼»ñGá'mذáiBÇVoÒïÊ[‘œ‹ìÛhs™½É‚¼–B—¢Ëصk×&[9¨Š"«â 4&(Š@×®]Íø/üýÍXÙÏmC^# ‡ ãããka,|šòáÑÑÑm(?úÀ×EEE½Füò¨]»ö333o¤þIäuÄ`Ù“°=†Ì‹ òÛ o4u‡¼?ãèÑ]ºtiÌjÌ9”½ÀÊÍö„­RRRÆRv,mæSÿqdJý4ê'”*K@FÊ*ûÑj``øë‡1ð‹õë×ÿwݺu‰?ï_?666ãa •]jÔ¨‘‹¡rè€ZµjU:u3i“b+ÉŸƒAñ2VHþ@~2m¶PÖÄ•GüaúØDù<òR0r6ÍÊÊêM|ù3w#ã:úH4ƒ(ù›Z¶lùjóæÍw“wé ðr" " " " " " " "Pe ÈHYe?Z , m1&®wë`\íÆÝpÑ¢EÄGcd¼9==ý'¶t¿¾xñâæn¹"+£ã¬‚ÜNhrÚ™qÓ-ÇÐø“'LE^áIÔYãæc¨ÜΖîõ”µÀwHJJÚkcêfêЭ[·ãݺ E@D@D@D@D@D@D@D ª‘²ª}¢O±`”üžŠ¿ó©|‚OVAnÀø5 Ž0btüƒádÊ1&n ¼6vF¤Cø!Á£äÿðaêMâMÞ ¼DçMÒ I{ŒŒÄ t=?£àü&d|Jý?àgõäÇäM@¯ÈßÈ*Ì»0‚^ÍÙ—ö¶q9ªFC`T=âŠW¯^½ú×±·1Âsö$Ædë_§¨´õ?Ú¿žÉeeÿ|¥E@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D ’¸¼’é+uE@D@*ˆ€Þî]A Õˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ÓR D@D@D  2RDEy"p˜@Tƒ(kye¬žÄ‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@hÈHîê5¼ tA½•ø‰e¬¦É3¹&_ND@D@D@D@D@D@D@DÀK@FJ}Dà7͉¾Š_…o…ߌ/K÷ÂL®É·~¬?9pâ`0ŸŽ?€¿__Îäš|ëÇú³~­9¨î­ƒÔE@D@D@D $jPy,þG|þ%|3|E8ëÇú³~­ÓÃô‘ªL@Fʪüéjl" " " %&Пásñà;àCá¬_ëßô0}L/9¨ªd¤¬ªŸ¬Æ%" ¥$QÊöj.•ÀïQøQ||þiü›øP»á(p¾&~þ¯ø²>‘r" " ÁxÝqNäiÒéÞ¶™#g¿œW)gbu¢åG:NòÅŽó¡¥E@D@3RNk:t8:Xsss#ºtéR7ØöjW-ôb”ñ¶j1ܽéiúʉ€ˆ€”-zˆ‹Ç[XlÇÓ¬F¯8Î^|®y ’Ø)ss‘GþO…•ÿV³ÈXPú)UD@D |˜‘RND@D@Ž ò•”f\ìÔ©Ó=hv)ñ:„ó[·n}û®]»b<øëZ“A½ׯ_V÷îÝeff>EVOÚeî ì)ÊfY; Ÿ¶Jn˜Å}]Íš5OX³fÍ÷¾yegLÇ!oøºuëL7¹ð!à»’òjÙJJî-Cîì;z=^+)CþQH*N žñ-Ã÷Á'à‹í^sœÑ$lç ;L ~Šuœ“¹xÿliÊž¢ÌVÄ[Ù‚Kg Åƒpñ´ J¿ úR3RN EÇêSD@D ¼ ˜A$¤cÞLhÝ/11q{çÎdgg¿‘””ô†Æ[FŒáÑ‘tWŒs1^61…Ûµk—[£FÆË###_¦ýŸW®\™BûŽ´¹Û1z¶Ya´ü[«V­þá;ÐÙ³g›A³ÜºöÁÛ–b)ËrP‚m õx;ûѾ7âÛãoÅoÀW´³3)Ã÷ÆŽ¿ ÿ^ND@D ̰tr+(/ÍuœóñÓg *^ËVðNL*®1u1P¦2q±‡Nr" " " " " % R#e=â02^Ûtùòå{Lïµk×&³úqQ39®1‘­ÜÙYYYyiò ‘flúcäýV×íד?æþÃ9Ü0DDä¸rÜ<ÿ>Ϥ޽F‡X™×Øyç† †Qvew`tÌ h ñ•è|µéŒ^mÑËVmžŠÿ’š7àw°ÔÎ=¬Û±cÇYQÅpz3í‘wbýúõ;ìß¿¿CNNΤ[’¿”:cmìݺu‹=tèÐcô5˜2i8Kâââ®HHHHEÖÒ¯Qvm2hógd\Dz4é%111ט¡–:rE0C }Ç®ÄÛ÷gþeüü÷øòvövïÉxû®ïÆÛÍísør5ž#_ND@D ˜8]“å8›0RÖAÌXŒ–/sážF<Ò+vÂÙÕQŠ.ÔTD@D@D@D@ª%wB’Ác ì€m§k t•À0øÆB{yH@‡®#>ò¯„Ñ2qõêÕ_¸ùôÑÃå×cX<Ý-sCŒ|±Ôkå¦ cÉkiiŒµ(IzÉSð{ÓÒÒžµ2ŒfhZРAƒÆ”¿Lúé¾}ûþHÛÂH»q&oƨIONN¶¾æSçq šfÜL£ÝxB‡­ë7RvÑŽ”õ$lŸššz±•‘߆`dTTTÂE´YBž+m5^ Œ›çÊŸ€ísl‹·Õ0#ð_âÍhY_Îäš|ëÇú³~­ӣ ”õ†Î­G¿r" " Å$`H ”wXu›¯œiiÜꑎóäá¨þÊE@s‚ÊõyI[¨ŠXRgç6þ¬þ¬ýFÊäuÆ ÙÔÍǰDZQΧnº8!}e³:s"çXþÊ*ˇ‘·‰­èÑ[·nÍ¥¬†Ç 4íÝwßqß}÷å°êÑV4fbpý£¨30¼ÞMÝ\Œ¥cIojÙ²% 0¸ÛÙ±ãVc¾Kôv¶­ÏAö+ôóír¨¿…ºM¬ž93lb€ÝÆêÎ×)‡NSL'úK ]Wª„ÃùŠ]+ÑöYMÀÏÀ›Ñð.üUøÿÿŒ/+7Aáí{Ëî@g<>¤«m2œˆeµ†¾µ!:Ê™òëì!ß œˆ€TžÁ örŽçxÊq>ã©ÓiÞ•&æ/ÍyæO‡ïF¬Û&h½\ E $êŽx«Mæ!g|†“k½Ï(I[Õ²$R#%¶ÍçNôF¹ ÍXù™o#Ýf sm|ó,Ζéúl}δ-Ò–¦ž½HǶ_Û™¾•ͨhÆ@Ëc[öWÓ1.¶ ŸÛYúo²7ÍŸ?ÿ3Œˆ¶JîM«çëÐa'ž{ÏŠÈÈëÀ9›{Ý:”™ÞÇ3ž˜<„²¡)Íç•HùNo›4dìtu¢Ž½pȶ‡ËOÀ †—âmÛÞcøßãËÒÙ*Ü$ü0ü𲬬Ü\'Úqr®äædLìйoDæFüýÀ[C? VžÚ‰€ˆ@%"05X]³høO¼=irÝRljZè8Ï»i…"îj™wZNDrþȲà¹NÄæp×Yú‰€ˆ€ˆ€Tm!5R6oÞ| +kbðëŒq­‹š•†ƒ0¸½ÁJÂF®Î-ó ©ó é‹û÷ï³hÑ¢ ·Œ-ÓO°õ9Ž´ç|I7?Pˆqû_›Ã£_Ò¾†Ê欌´U’fL¤Úwâ^æÓïûï¿?Žø•´™Ý³gÏc9“Òå ÑÕîi<Ùû‰,eÌv¦¦ÇÅÇÇ×1£*ÆÉ¹”§àû`¤Ý ›©§‡¯oSeOÀ ˆ=ðQe,ú^äÙÅÃÏynNœ‘ì7¿$vȼù¼c|rúœ¡aaH ?XÒHD Š¸…ql v,ã¿|ÍÝæíÄ;Î~.šc69Žçf°rig+)ƒ6 –¢_5­&b/œ×ÅÉr&ð›?ãdÞ³š _Ãc!5Rò2›LŒp¶a+'Ïg…bÊvú&‘÷R ¥1mÕªÕ\Œœ7îÙ³g/á¹³Ó9+rí/Ƙ7Àê×±ªsg<6ëÕ«WC;#CýÚÖ[¸pa_òÞÅ@y áZ¶r§aT|^%þ"†Æ'8?réØŽ‹9pø ¬”GûRmi aGà¨aoÌÍɹ3+Ûsvy¡úq*Qí:CçÆZ!È‚œœÈÚNN›œÜšsÓç²£uäD@D@D@D @aµÅƒ… XM™\ ¦EdÚVlŒ|uñ?Q5`1Fã5jtÐwû8«;;a(œ…qñd;ïƒæ>!lñ>ÃeŠÝ2Ó‰éÄP?ÝÍó yñNíÛ·×ó3}E`¤lÀê̼3+}Û)^}Ô<÷¦ìçñpq¤ñÒ€è!WÌžÁ19¨´âÑÜVˆ÷Á'àKä^å!&FIÏq-L¢_ê8ýYYy++§› ò~ªå8í†;NPóDÄãƒÖ¶r"à!0bDn™oý;Çɽ,pèåÍÞfç~ˉÀ½ ˜( " " "àO€¹´\Q|”EÕU¹”%£¿5 '"ç›ØGD:vk™:¬/°’²E ¡NÄêˆÈȵ’2%•‰€T"ñè”å¨\ލ±±2JqœS/tœíäE`¨\AØÝ[öÆKþåâi”~Aõ¦FUž€»’2×Éíh°¼Ãq;ÇŒ T'˜²ÜçöÀ527r`ÚÛCòíT FžÚT ÷2 )«ÄG©Aˆ€ˆ@Ùùvï²NùHc;wÛ±ï,é’*…°-Þ9v÷‹2uÞ°„ÂkWRkÈ<¶ÓAA."bi͈ÈÉ©sÿ¯ b剀ˆ@%%`gQöÁ[Xl‡²1•óVa¤¼Ó ”&€x.Û¼¯b5åF®¨Ñø‘Ô+å¼bwð[Å ôû­¹b"Ÿ€÷!ã;u†½}vVn·ã\ò×8œb#ÏÔ·†&TVš<¶{¦åqlMiôR[ð#`g8ÊAÀ¶]³Õ{NÕT,U€@D.ùù5#ºœ7ô\(«ÀGª!ˆ€øø™Œ¼…%qOb|¬ïm°šs'=Û»]¤¿ÀX9ÙM>ýÆoõ}²‹Œ«_‘‚U¡z°ßtûm·ßxû­Ç¼^ÈSÊêÍI£°XIÉ[­ë:t({åÊ•)¡C¡žE ˆp²1OÎæ©Åäó†~VIhè" "P VE^ä[À[¼p#o_œxD2D Œ¤Ïºu×2ï´'bBnDî6U°Ó[ND@D@D@BK ä+)yQÍS)))ÛxC÷ƒ¡E¡ÞE úàü©Lö’?yrú[CGxKÊê÷-ЈE@D@ª#ûÍ·ß~›Ø\À3'¨Ž 4f°!+)/‰ŠŠê¶zõê/†ŠjB ÆÉíóó¼¡?¬&ãÕ0E@D@D@òøuöoȹªÞйõÒó)%" " " J ¤FÊŽ;.ËÍ͵­Þo³¢r,çãÜCz1á-ø1ø¼´æfòú@僘˜˜kwS÷4Ò·QžJÈ1PκÈÈÈë©û<ññÿà ÉÇ ó9ÞÒ}²fÙ?4þ>ê~NYoÚ?Aº%r—"oìÚµk“Éÿ+ù9ä ¦m{Â…U¯\µjU:zKýgñgã·ãoàüÊ„r"P)üFCÛvèÖÁHøÀd ”Ç{Ëw¹eÔ=@<ïLK3`âó £ã‰ä%™ÒÚ™y_[œö-ð02îµ´9ê:ݺu;žU“–üÑþ3G¾õ…Á³…%i·‘vVäºx"2Rº4Ê/´Õ´¯àís(®ÛIÅ“ñ©Åm z" " aI@¿aù±H)ž@H·{¢v–7?àIn[ Iº>[¿íìG3ºõΚyë-¡ÌlcreOà!ÞŠT{R åÞKýúŽc†ç§JØ4äÕÓWܽ %lE¯¼Töï@Èÿž¤@¥'PÝ~*ûß¼ô¯æ¿[Þ9Œã†•þ ¤ˆ€ˆ€ˆ€”ˆr“\F‚1Fñ²›ºîY’ÁŠÅ€Á”—ÅÅŽbÆGVBÖæå:»Ù>Þ*11q·É1bDíÛ·×+i_ö2Ÿ?üÐ ž6÷8úº>çc´Üâæ),]‘’È>¿ˆ»‚7‹6ã·»œà¥ DTh“zCçÖKYq÷þÍ;'&›w…ÂWgeJàëO–;ß|ºÂd†ýïN™\ÂÊš@µú ðÂËmszO§íz•5KÉ !•[ÃÙòÕ7Î÷ÏwrÐo@…PûNîEÉa¯¥¨pÕj¢€áÐlT51&.Ç€8œøvVQ^YÔéëJd?W²«±Lû¾®nÂŽü Dj¬ÈýðkÇ ÓvæéÏøpw¹ýGßá\pÙ„p×Sú‰@¡¾4ÙY4ëïV^­~w ¢‚`è7 jj#a@@¿að!„— 2R†×ç!mD@D l„ívïò ÄËp®Æ8ù<¾g^>2pàÀ«Ë£“)e¹ÔÎù/¥idw¸áùâ7"x/'" "P9è7 r|NÒRD@D@D@D@‚"Pè‹a‚’æØæ}ßóz‡mÝa®±Ôó!P‡ø”Žü÷GŸÌ`¢§Ñh,~†ã\Kðo¼-Ì”_ú ßÏFš‰€ˆ€ˆ€ˆ€ˆ@™¨VFÊ2!V=…ͰۇxèWÑ“‡ø¯,öŠÞ‰œ¹,¨üÉq^&joz·àr" åOà¬òï¢Jô°‘Qü&#Ño@˜|RCªýïC §ß€âi¬Z" " "PBj¤ì„cëõ,¶FŸ\c©0¼ÌgçZö¡ÃcÑÿi^Žsz…ušŽÌ@™š®ëµÑ¿%K«Kk³z²ßÛ¾{ËJ%LE@JB ¡$•«qÝxÆþA˜Œ_¿aòAH ¨ªÀ*bñt.¿1^õ!" " !5Rê3¨4ìin|ˆµ=g»ãÜý”¸¤ 9€ŒËù†ÀvçN†åÿ a©•”àÄ׬ڵ²ën¸8ý„ö“Hm÷ê]Ê”@|™J«ºÂÂé7 êRÖÈD@D@ÂŽ@È”¬D¬É›°Ÿ ÅêÄoy¡ÍŸ8+ò«nݺÅ:tè1òC-¿$..î ΕLeæ(ò'ãíŒ*ËKþϾt»téÒ6++ËÞæ}*þËš5kÞ°fÍšÕ´ý«ÕËÉÉB`ow~¬FŸ“ž†¼=Äo¡ÿUú·öþ޶ȾƒðzÊ"ÇtäLaL¹Œoù‹‰ß‚³nݺÅþíÃÏPÍðè`€œƒqò2Î{üd2F¾-ùšÄÆÆæ¯° ÆÀ\ê 0`€-ŒËç¨kõÚ%''Ÿ0pàÀiQQQÝÝ ä¿ÍjÆDd/#nv¯YÄ· ïmšu³z…õïÊði7†¼gZ´hñ)ÞÞ=ƒ¼n=âSécýþèæ),1å´˜7•ÿö–¸éo n#šå8ûÌP-'" "P9è7 r|NÒRD@D@D@D@‚"òíÞh½ËÕCžŽlk·mÇNa»öC¼¤¦aÆDó-Z”ÁöéÑÔ’žž>•¼E‹/¾‰&Û¬ëbbbnÏÈȰ•r›æÏŸÿPv ;oZ9móú$™†Œ/,ŸÕ–Ä=L ëßêäÙ’üû“’’îµräX?ë,nƒëw‡cú¿”þ–â8ÿÒ!è?´Yq¸Ýx‚ä D„¤Éן,w¾d‹ƒåD r°ï°œ”ý”D‰Š& ß€Š&®þD@D@D r¹‘c^NAè0LΠ,߇Շ[1L¾H½«‹ò½•+WÎÁ€Ù…作]9ƒð|+sÊ=­[·î÷ý÷߇¬+1:ÎîÙ³ç±t0X².° ÔA-ÑsþAt}ÁÊû÷ïƒ5Û§n‘}úÔU´p_Q4ƒ%·ãlï|ÛÂëQb‡ªÝu8w Á¿Ž¨Æß|ºÂ1/'" Õœ€~ªù@èºÂa»wt1ø5¥`¡(»wïÞˆU‰ç®É1Ça€LÂ@y,Û§ÍØô:uk dîÖ­[GÙ6òÚµk?A •QÔ+0«°þ ¬|8s :^Þ¯_¿Ú–ܳgÏóœ¡91@}O`"Öß_ï.aû©¿›³×áí|³ÊâÌ8//Uå;PYþî¤gøÐo€®‡UåzXǾWi&" " "rak¤„ÌÃý&±‚2—èØ6í…¤ÛÚ™Ž„¶ï5C¥ýx+#ï Ìç8_òN 7Ñþ#Œ…¶ûÄÄDlTÅvö_Xkú{ˆ²_÷íÛ·ƒ>?GÇ8¼ÙÅäÊž€I9yÿwmá'ÔyX§>>Õÿ" " •€~*á‡&•E@D@D@D@D RÀÈa+& D¯^½Vææ³ÅûÞÔ¶ö¢úwûð 髎»šÒ7_ñ2'`«g·³!—·Hoõ¨ÿ#þè2×DE@D@*š€~*š¸ú²#à9ÿìÄI’ˆ€ˆ@U!`ÛLäD ²èƒâç–@ùÿQwi ꫪˆ€ˆ@øÐo@ø~6ÒLD@0#åÄ@T&" " " " " " " " " åI@+)Ë“®d‹€ˆ@%&ÎgRVb¬R]D@D@D@D@D@D@D@D@D ¸d¤,.)Õ(gˆ}æ³Þ¥K—º V¦ˆ€ˆ€ˆ€ˆ@µ! 3)ý>jÞÌmoé>´~ýú»üŠBžìܹs¯œœœièvfiõìÔ©Óq h8oK··]ˉ€ˆ€ˆ€ˆ@‰˜q‘ùÄ=4º”xˆˆˆ Âù­[·¾}×®]1üµ Ôû¹ÌYÝ»wo”™™ióž´Ë&ÜAÙS”Ͳv>ß$fq_W³fÍÖ¬Y󽛇³Cvvö«´;ÉÍ+Iè;¿*I»²ªË8ï‚ÙógÏÎ,+™’#aN@gR†ù$õD@D T´’Ò|LLÌ4&ÊOúe‡]²´z2Æ><û‡ÝÀ¤ˆ€ˆ€ˆ@¥ €r&ŠžÝoÆ ÇGFFv"}jRRÒC+W®LÁðVÓ<†ÇžäïqÓìƒa±qFFÆ Ê>eNÓÖÚרQã/ÌO¦!·· €ò¿¹íÜÐ×@iõ²²²¾Àp9ÔmS™Â#FÔ@ßI{öìÑœ¼2}pÒUD@D@D \Ô,©%ÊÓëa<ý¶§iÇ2¹}œÉéy< ïKhOçï ¼ž²ʦ¯]»v “Õ\V.!ßž²ß? ?‰ÉíÓ„Ž÷iøÍ”Û[??`â{MbbândýÕÊ1Ì !°'í1þÜV&Rwñ[¿Š§þ#é+‹òiÞ­K6ǯ¡Î]Ôù„x>G½¿¡×Xä¤Ðv«Ÿ¿ï¾û"çÏŸ ùW“ߘ3 ô ù9=zôhJ?·P6Š²Ý”ÝŒþËÐý°¸™üFäX¿~ýÉÉÉ}‰ß¯‹®s=ÎWÏ@<(»Œ>ÆÓ¨9þKÆpMTTÔ.Ú?Jº.å³à=Únÿy-é)ãËX“ÉïDþ ôë@™œØÊ–£ù>ü ¾‹]»vã³ÀÕ5ÁÈTŠ'À\&#ãå±±±M—/_¾Ç4°y¿£ˆ¶·4+mu¤ƒA2Cb^š|‡éÅ}ÇœÉæ8Gûõäd®²ßÍcN’ãÊqóüCæ,­oóšþôÕ–¸ÍOʼnñò~sVû·AO3j1¿²zÍ%‘YùÐLæLgYæOñ›ÉïáíÞô¤/AßY„GÌQ͉ñöYÊ.¤þÏÔ{Ylݺõ5kŸššºz’?›:‹ mž8†>×Sü,þlüvü ô¹‚Ðt8bŽçeX¬9¯Ép"R#%“ÀVåževP¶0{‘°¾¢Ì¶a¢j“È(ê=ÇÄu)ñµä·¡ÍhüÚ´%ïu&v¯b¬Ç¶¡w(¿ø­Lž!m2û“×5Ù´‰!o áÿÈ@|ñ¿®B¦Õ;DÜ!þo‚ Œzg09½¦“îee®c‚x õ¯Dî(d¤˜L¶/ýoÁ‚&wùWREþ¿ßyçäý½^Aöwäw¡| eo3¶¶äÅâmroß™¿þúkCÒÿ"}-á7äÙ¤×Õ-OOò äAÝc){Š>lÕd2b \€C¿‰ä]Hù8ØY½ùÔ» ¿„:Ç›aóvøï¡,Ï8Jž\5$Àw ß–>¾÷Améã{îÙÒÇw.$[úJûÑ¡¿ŽI(-Dµ¨˜Ëtà·a§k t…íâæ:æ ©ð‘%Œ–‰¾yôÑ‘kï7yÊG?uÓ’W‹yKk‹N&XРAƒsöíÛ7–´=Ä>ÃÊ\Çò–Ìë œ_1‡kQÐ\½.à·ï+çá· m~‰¿½[·nmhÓÔÆÎï[s²mÛ¶GÝ“Ž:ꨶééé×*ÚÍE¿ëð#˜kžƒ\{8líía½Íý6⟣ݯ”·Cç àöé6ôs"uŽ˜ãQv>ùÅšóRWND@D@D@Š€M®Bæ˜h]Àäëž$ÿÿ9ŠxVCšBL°Æ<Ó¢E‹OñˆÏ o ¡Ç˜ ã&&„óÈHaòÖ” â0ò7“÷/›@b`»‹ôù½zõjhèëm›üR¾Œ¸ gßB½·©×Í긎É_yƒ({`ÕªU; ðOÚ<ŸÏ°Káä¿Â“ëU6&ÊCI"ÿOÈú—åÓç‡Ä_À_f«()‹§Îô½ƒ2;‹i+~8ÞÆAÞÝ”ÍcÒÚôƇ¼ÄŸ·:9ÊŽà—Œ>=i»Ž­XèÓ86±ÕœÔO!žI?¿PÇúÞÔ²eËW›7o¾›1ßAÚV88«W¯ÞFÿ6ᗫƸišÉð«ý–>þntLB5þ;ÐÐE@ò°‡6A­ª7)ÌIŽÃÿœObÁ‰Î̯p=s£öW;œËu:¹í؉rÛʧ1?ìî_?Ðüª°¹dïÞ½EÎû”Ÿes9â6öh;WóСCçÐç"·T8bN†þ¦Úq(ÛשSg FÔã˜_~Ã×À‡ëÉÈÈ5Ô›jó@òìà@òïmÖ¬Ùæi/߉±ôÔÂæx®Ô+öœ×m£PD@D@D@BM ŸÁ-ÊØÓbÛÆâº5n„IYKâ÷³5ƶ‚ÛdÖ&më,nCÚO‡cžÿS)3£bKêå=Ç@ø¹d¶6oµ(ßåÓ&º_XšÉjñ|,HÛùƒé¾ î˜aôÛVßÏD¹­¸ô8ìžþ1r¶d‹Qž.®¤ÿË™ÜšŽ¶½é;o["e¦ãGÄwâ=“T&´¶º2ÆÄÕÔ³•–G¸‚x$$$üŒçá_`}¶"¯†cd¶Àw€õ^·ŒzOø7­›§°z¨Ì[úøîŸÉwù^ íṽ­ÐîÈß»= FÙi”Ù‘ÙMàJ¶-^m«‚ Ú.Èßóßcø{|YùŽgØ¿þnŸ@žýç›ÀßR,ƒÑ×`ÊbñK¸Á¼‚¿ÑT®QKH¿FÙ]´É@qi[-¾„›Ôkìl7êȉ€ˆ@Ø`Þ±™•}'ú+ĵ+‚km3ßyŽKs}Û̵®×Ëú\÷2íúè­g/ÒyÔ¿^aiÚÞÎ*O›—mâØÏ¸¦ÞOÜ^À“çͯÐß®ßyó7ß¹$ùï"ä,ägRïCÒÍ`Ѓ¼sñysÁ‚ædœ§ù&ó,3˜þ7%%Å®õÿæÁ÷]¤=s>Â<ÇïgŽH?-ÈŒ ¯´Í+'Ÿéæx´)öœ×W°â" " " "J!]IÉän=“¨Ó\¤Oõ‰ïcwÓºæ⸩·­2‡qÀŒ†þ.y'¹™öt›´Mvm[ŽmÊrËŠ ™`þLÛ8¶Ùù‡1á¢~ýúÕvÓÞðêåMÒ1nt¥žéŒŽ¿sëÒ÷)Œoã}ä51Ã[Fhe‘•§#m¾§,Oq34è âÁäõR*_ÍX®ã©}cäMD~„¿úÞ_ê²¶úMe ô'U=Ó¶ôñ]É[9R¾ó…n鳇n;¾›ž-}¶­Ï<K§»enÈw¸q{€à»¥¯1ßß—ùxÚ­ç†äÇ"·•›&´#ZZÚdQ6’´ýMž‚ß›––ö¬•!k2m̓ݷoßíoˆ|{¨0ÎdãG‘þ˜ôxVíX_vlÂãÜ`Úµ, 9vl‚ÃÉ)³ëBGÊz¶çü±‹­Œ|»IÉjŸ>„‹h³„<»µs`[`Ü´›_9+ì¼Ø‚B5™ótöUŒë÷ ®û_s ¯ë›ïç:÷ y=ú÷ïã[Æõò ®¯øæ•$Îo–½ §;Hšs}]f÷ìÙó_äš_:—äšÿz÷2O|9þCä[º×ð·®ãGÌQÛµk—ËYãwyçc¡Ý(Æy¹ÛÆ/ôÌ‘igsfÕªU«…;GCFâf  8ÇcŒyóI?ÙJŠ€ˆ€ˆ€ˆ@Ø©‘’I—Möº3¡íÄd˶Ñ\æCÊnÔ/w‚¼õðy&sf (Ô1![Ê„±·5d•˜¨šá›+VäÀnùÅqœwd+5¿`iœÛËBÎDŸI>ÓýÚ/#OÃkÙVp&¦/ ƒ/–’ÿG[AE~â¶¥z †ÖoˆÏЬ?™[±EЙ¼¼U¢–oŽñ¬ ¿;uš™lâ×ïÚ7¥æ§¶åœ'îYè6’t”·u¡ÇàŠ\Óõl¯.¶ÚlOù×ZŸfL%ߌ%rÕ—@¥ÝÒWÔGÆßi6Fü‰¬¬ÜËßËäòrƒhþŽØ.èL‚ɦZÞñ ´/ôØn–ç`œ¼Œ~~ ™méÛBÛ&®~´}ÜŽV ïuÊ¢©;Å» )kPW·žB¼Ì&“ë•=ˆ™Å¼¡•éÅt®×±ID_*êi­ZµšK½™ßM³¹†Í9lþÌ‹‘ñ¤É ÒÍåe4£ìAkíÚµŸ@^×QwîãÉ5·Ðùe…Î%¹.ÿˆ<;>gÉ@Øx34~NþóCO_î¬ê¼‚‡Yÿa>v9ÿ!ÿcäÄx_ ”ÉC2ÿ‡àsà﨓Ä|öJ“cÆVÎÙüÖæ¤ôhŽçv«PD@D@D@*)m[%“¯ñLÿ µõøHgA üÊdlOé?g‡ÐÊ sLú)›ÂʣϙÀ}¬?“\XýbäÛ¶ËÛ‘e[¾ŸC§›½Û¾óšbh}”DÔ$ {Ÿ÷œIþý´©ÁŠ€mäEþn&ä÷›±øhüÈý á=‰¿‰§â“—Ï1ÁßÀ$ô>¶m@Æ×ÖÌW¡èÄËÈ>~kèkqÓ£‰N1‚|Bútʽ}O Ÿ¨·lÛéÕ¦+úŸI~BÑ]©FU%À÷~3cË[-쎓¿G{™N¡«{Ýz|—6S·›vC¾‡õ̀囹÷F¼Þ®ç{ù’[VPh[úkçÍÚ–¾øžö/¨žožéì—ÞäÞHÛ–>ÊÒwìØÑ¢¸²Ñ9ïxd·À{ŽM°£ø;ÚLù Œóx®#)è÷_Û í-³í(«áêBùNo< ;]¨“A~¾›k·B5®Ó£ƒ¡ý>ó‰¸~½Íuk1fn*J73Î1Wº„zMxpû óœãy£5¿ïÕ¾°r~³îD‡›Ðç#æf_PïÎ)ßí[?Ðüª¨¹$²ßEÖ¯üf$ãí÷-‡¹Ú"_ù…Ä_¤mzmÁI(Œ¨¯zë.ãw ‰‡ì§ø¶õÎ9GSv­Íá´Šþ‡ÏGÔ+tŽç+Cqb°'ï9Îq«ÿ#·7m¡1ÜÕ”¾ùâLä¢Ý P’”!ÏVytÔ9ÚV`ùWbb]3 úç[Ú»=ŸÑ¤ z6¿íáU+4ÏX0Ñ= my¾º¡²äV¨B*¨Tì{Íwð ›ù¶ô‘lùöwD¼+yùn©wy_ùoé#ïeÊÞ²¶Äßäïÿ¯®œÂB[ÕK»¹³6GÙwÖŒ€´½‡t¶ÿ–>¾Ïݨ¿Å•GÚ΢ÜhiÚØ îýî߆É1ø£Ì$Y#)›oí½cÝdqs¦?å §ÿïai3—²—¨ÓÚJˆ¿ˆ¿Ïâ”mÃ{޽°ÐÒ–oŽú÷Pï±Ã)ý/" áK 4ó»s½¬W–£³ßd|¸Ëõ¶Ðù•••fL…jùþnºõŠšëÚK 1P1g4Ýß1W–B¨î­:JE8y+o}xbþO•?ä&ü_ô•ÎäëZžFßèÛ/«ùR}Óʼnó„ùõ’‹S·8u··¨zÔùD5wEÔdØ“}Æ_PQ¾<ïxlLA9ïÓþ#Ú2©µ3“ò¶'y·•·#:TF¥$`[úøu·ôÏ÷) ãY;VvLb@ÅÚÒÇÖ»½[ún猭t¶µÙ™e¶¥o@) Ø–¾Wùûx‘›>;ÃÌVeç[uÈŠš=\gšÙͭܦ|¨_õ.\Ø—¼wY5l+zÖ"/›Ów ‘wL‚ŸÛúmÇ&<ÀÍg[þî¿6ƒ(+ƒD·ÓÑ­)õ§²Bg«=œ`ëž½ öJ‹€ˆ@e%`s`u÷ÎG~¶}AíŠsÔO ù•·,è1¤“å1¯=H`>Ÿ{ï½÷äËðKxwùåò£uxEçùÊø€=(_´h‘íN)±cnqÞyçUÔßh‰«AذïÉîÝ»s¼×ÿ°ÓO ‰@u!pÄ꺊¸¸QïDŸöÊB‹b²õNEê ¾D@Š&PY·ôqFØ7\W椧§Ûöº-Œ4ßÊ~ˆùFIÏñPG¶ ú“àO-б Ô}˜Iî$tHÀú&é…¤ÛúËPZD@D@D@D x˜¿­Æù€ÃÓFæ`ÿW<©¿Õ¢Ííø?ö>ŸþVRybÞ1ü@xC¸h]ÔêoCœ‹¾ïá‹<ÊÉ““ÝxIC[áN_oñ=YɽÁJK—TFYÔG‡'ìûLØ£,äI†ˆ€ˆ€T ¥Ùþf“~øC±¥ïhÿíæL€:1 0Ã¥ÃVïú}xm´1ø“àß®°clòÄÄãXÿúJ‹€ˆ€ˆ€ˆ@5#PfÛ½™Ëå{]Gæ®m'KAe…åÙÙ;˜·†tçaaú•$Ÿq<€ #%zœŠÏw<’ïX(»ÿsææ¾ùEÅ©ÿ‰ÿ±OEµqËéï2Ú?ë¦CÚØñ2R†òCPß!'ô‡k.D@D ÌH‰áp+ O.…5(3RN,Y“‚kc\ÚÏê·SÚ‡y½Ðp6s;ÏË1öL'¯#eqv¤Çî,u¥ØCsŽå™Nº3>…vð’ÓñÞcŽ&ÐîòZn¶6ì²¹†Ÿ sy£ÈÚƒ_AóI7Ž‹‹ëÎq?3½ü#éñ5)ËbÎÕ«W¯þ‚ü›È3yCÉ_FIØ?z½`ÀÙm3™gâ%ÿê\a;It0¸œúwPÉŽ=ú•v‹h7Ám„Îÿ.OºyzçÂÆà(¼CñuþKèØ9¹¬ µ#ÙZ#/ùûy)ÚµW¶½(]ÑÇŽo32hjã|¹sÈ¿›ø)kN¾½ØÌ!JÙ¹çåa-yîXþ–ö²Ùðùª(>ôùOú섎öÍ-ÄísöíF™×ÿ0º¯ä©ßóÂͩȽԎö0c;c}‚ò\¼½ cõò•G^‰ãéB#ÛMÖl,›;ØQv2yÿ@Ç8’M‰O¥ìIôœAú$ü)3xÊž§ìVⶤÐïs ï–µ•n÷~~ä혉;CÕ¿ú(5ÚHøãˆ÷Fa0¹Ã]5IÞ8Œ?]1ž˜ÁÏêå¹\Ebo£FN4h?ÖdÛ¶m·YÚMƸ8ŠèGÖÞ¼(½eÓ-MÜän¡nÂuœ?ÞÍÊ™_.ÇØy¶·ÎtŒLã½ùöR×&ôu"º ÀhºˆvWSßc Â@y7yÉ´ëEvÔÝCú&kÈa,²Uw“‘u ºœX«V­³I÷ ÔÆ-CéôqíN‹‰‰BúQ3JY9A3fQÖÅÆbºüñ?XY ]m«4ºÜƒ¡±m»£O_Œ›ë­r&apCtÉ4O’<VÃ^÷7PZúÏrdS{ ¼‰&‡>wÆÆÆöõ‘ë1PÅÇú§í øG¼m(MêÍ#x-Ü.â;dŸ×^>K8ê9ðxÔú¢oûÞ™øˆÏ rkx¼ÊQT7›ÒÚ1^»o™B»ŒÛŒëÏZ~iœ¥ÏØÂótêÅw÷w|z™LÛFÙlÊ&PÖ›Ïò Ên‚éIèp-ñßã׺uëÓÐó š\†!õwÖ6ƒ@ß-k+'2Rê; "P- ðc»—Ø9Õr𴈀ˆ€ˆ€T iVþiCan÷ •·XwAQCør1ugÚ u¼/ïšJÞ€¢Úù–3´UošIž6XƒÕ¾¤¤¤s02]MÒVš5´|¯[æíëWú6#å/øoÙ@ú?#áÌùóç?CÜV]žî6,,4‘1£ÕF«sî¹çþB0¼°ún>ƤV´­ƒì–·råÊ]f:Ï[gåg¢ÏóøË1þl«L½e…êê}9ØV©.€Á_1´µ²Õ—ÞvúkKÿ[ ©dŸÍ¼œò'+Ç øŒ’Eé‚åSˆyÙèi/Ÿ}ޱí¶ïßgH›¡Ü\¡|¬Ï놾‘ðù3ÉXd5²|×½ç?ÆVáúäÏ&ÿ!ÚMáó;ïýW>eAEáØ™Køþ¬3Þézdñ=nCY3Œ£ãì{HM„¾@IDATyðàÁÇ(8„þf”µqd`Œ¾×Ú ç6²Öà[áÍbè»u¸µþ¯ÖjVëÑkð" " " " " " •’†’,_à F•h|Ý¢C–<+­.râ0Øuol/jtûÛ³gÏ{ÄW#?‘ðx ·¬ˆÐ¶jÛŠ¶ÏÜzÄvã……èm:ï–{ ;Üta!cmAÛ¼ñ[=/Û‚l_;óiiiÝ0R›‘‘±ÃÚÅfm…b@]©s‰­ÐÃ@yãŽvïgÛ£mµ¤m/ŒóQèåB­º¯«É*Ìn†¤Ý¸ÒÖôÊç‚å“OHá‰Cn†ñúôånÍ/”qå;´{ 6Æ¿&zûGQƒoI¹ÇøLhŸÉ«œ»¹cáÙ”]²uëÖ)¬vìàûý·z%t¶’ó[· r#ø¼",M<š1™n3 m‹¹¹gÑ×v£yÆhßÏËV|ºŸA¡ Šøny%+¨Î´’²:ú»ˆ€ˆ€ˆ€ˆ€ˆ€TœƒWÃÊ`Vý-)Æp–±%uŒÕð‰áÅVV&X:Xg/i¤ÿ?4lØðï*Ë4Œ;ƒOQ2©–@.µk×þØVµsÌ1›Í`äÛŽt½YA÷ß<âžmÇ”àæcdêáÆ½¡ôš[Ãc ‘ý1Á©0kciòë‘w>ì>°4òZc€ªÇJËå•î…ÍËèè® K Jºz_ Ù‘_Ón†Å+­.ÞãHo§ŸNë<†d é»–·øúhëûïc,½ùÑVÀʾ£Ð±½O¥$Œçºé^½z¹+X‹ÃÇmVÒÐóù ¿]¯Â/0>K¾ggPåc¾Ï´jÕj1ñÚ°Í÷9“·„¼óãY1IÚãøì;6iÒäWÚÎí2#¶oß^ïpéáÿùìãasšo^ 8ŸÅ'ôÓßå S[…kãqØÆý%åÙ”×·ï¤9Ò¿Räc­Z.ƒ@ß-WuN`CÝ´ÂêE@FÊêõyk´" " " " " "PU|‹1c3þ¬f[Šqg²Í68 63È߀aå|’S-nÛd­ŒíÙ·bHBØ^ý-ñÆ´leÔ»›¯ÓŽh‡ æ]ƒáM–¦~=Ÿ²³¬mû%xj÷îÝ!wuâOü+äèû.ê¶Ä0¸ ¹ÿãܾU´NñmCú u·øæa°zŸv¶=|#ýX¿¶]zœLÝzÈ~‹òÑ”% ÿ}äGaä2Ãå0{‡ü÷9SÓ „Ó`çÙ¶NýÓH¯ lõß ïß{챯šÌ@ºîÚµ«1:ëÕÖŽø$dMtu±ó‘;¾_#{!å‹ÓÓÓ=VëzC©ïo´³Ïk<åõY=ør×ÿ ìlPC§»‰ÔÿjfHýñ ´µ•°Åu÷Sì’Чq:u<çâƒñÙ ™f€[ÍX·çÜÏKƒò}ÖØ¿CNøL§©¦ñÑlÁÞDÚ^Bô&å³Üó*­Ü²G—Ný¿—ÏÛè²¹ ´ÿí³­%+43éc$yÏRö~ ñ§0d×/Jr È(ô»åÊ¥ÎhâsíeJnžB(k÷–¥@ 6Q=zôˆ F¦­ Ä{VÓ¾ 6¶2Ðt*¨¬¨<m›TÏÞ˜ì]µwD±­eUb3ÚÚöÝ#œµ¥Ì³šÒ¿Ãëq¶Ò?ßÒèÓÔ]eç_HWú:š­ÉÇø·qÓ¶‚ÒúuÓnH;32æ3ĺeÚ8lœéKÛ(džPPYQ||û(Nœ~&á¯7¦ø™âceÅéÇ¿Ž}ö™øç»iØ„>sÝtqCãÛúö¹Ð~—;û¬¬Ì?¿¨t ýn™>è±<Ðw¨¨¾U^y ñ”¢òEš‹€ˆ€ˆ€ˆ€ˆ€ˆ€„93Ræ­® s]¥^0C«;Íȶ—­áw»«b+POW¼!¾zœíß/+?µÕ¦f¤d%çNÛÒî_'”i {Yé8¿/®´ù;ãÚÊx~¦Í¥Ä¿d%§gUhqe”u=Œ­²šò |=[èËZ¾ä…7Ïyá­¢´¨Êx Ñ>ŒSñlË?‡q潘¦¢ÇÌvt;_ôXÿ~1äÕ¶<¶D¿Å‹—ø—‡:Q¯Ä«”1j¾ÅxÏbLMñϰ…ü]ÂÅÎÝ ©ê\D@D@D@D@D@D@D Z(±!¥ZPÑ E@D@½8G_‘2¤øÕ¹ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€T_¾o#¯¾4r# 3)õ=¨pœ;׋3Þ¦qþØ™¼(á!8Dü®Â¡þÙÙÙÙ¹œ»¶¬°:ʨ|vïÞ½‘kÀóüý?\ù´ÆðºžoÅ?·'C£Åo½¢Ï Îñü#çYúžÕ9Ý>þ­Ö‘1ÚA»Wh·›ºñGÖPNu# #euûÄ5^3111Ó<˜H- ”㸑µ7ÿʉ€T!¼É{4/pÙQ…†TîCÁ ÷¾£Ë½£tÀ›ÁÇófðgKÐÄ1#f—.].áúþDIÚ©nÕ% #eÕýl52+:tŠB÷ã벊2ï ®(Grƒ›Eþ´N:beÍd|ÒKâââÆ¦¦¦'Ýß•ò\ s:ôéÁÔ‰õÖ»"!!!•÷%äÏ"ïnüQøI¬¾|šÐñ®ÞœBy+’s‘}m"³7úØMrK ¡KÑe,o¹M¶6r" åC€¿Õéü-vÄ@Gx#½,u{âZÑ„¿ÅQ¤ûàO¤<cæ•„'ó·z'yÿÀ_keÔû*::zxbbâîøøøz)))ÓÉïŒO¡ìƒV­ZŸ={v&ý£½É܃_AÙù¤sèÎuàgú<™¼G¹½íz*F´"W)Ö'2œ­[·& çä1Âr­i‡üG{•£ÓH‚ðöFñ®m׬Y³fC×®]Oá÷<:Ô&ÿQ‹ O¡Þ8d- ,Ô1Ž)œF›ú„µðOÒßsÞëïDÒv=¼ß¿ ®p½ûЏCû.§mýEš®slŒ`u|ŸÅjôùÖ7Ï?^˜>þõ J¦Õ¥,¨Ï« ~”>t&eø|ÒDD@D@D@D@ª,nºÍø/üýÍXÙÏ,y¸!nÈp-nzŸ¦|8F‡6”ÍñuQQQ¯ÿ€üj×®ýßÌÌÌ©y¹©ïIØCæÅ„ùm7šºCH^ŸÊÍìѬÖiŒ1de/°r³=a+Œc);–6ó©ÿ8²N¥~õÆʉ€”#Œ_fpëÊßâ'ü Öö튼yäE6lØpõìoý[® MY©÷âËñ·ò÷jב–øŸ¸&\Mèp½¸Š`o£FN4hP'âM¶mÛv›•!gºõGÔúÜBºá:®ÝFŒQƒøl®¨Ó»V­Z¶ ù&ŒˆÖw@WXŸfE¦]·ì:äqȼ¿È\“:X\ßú¢K'êþ•kÏ¿¬lõêÕ_˜®”/'¿7†Vë8üEVÈatÝ ›+‘Ùd<2&ßwß}‘È›G»÷ñ×r ¼Fíˆï…«Çk×_úº‡ö=¬- úr^o}Á79-ý=òía’Ç!çBx=lžëêßÝüÂôqË éSšÏ«°þ”d¤ ÏAZˆ€ˆ€ˆ€ˆ€ˆ@•&ÀÍw?np¿àæ÷¿6ÞÀ±±±¹Ü$×àf· 7¿¹Ü 0`ÀC«V­J§n&mRlå#ùs¸ ¿Œ›îÈO¦ÍÊš¸òˆ?L›¼7å)šfeeõ¦|ù3mÅ2®£D ÃÉßÔ²eËW›7o¾›¼;H{V9¹òŠ€T^½z5äo¸£O,Z´(ÃÛs–«ïù»ÎŠÃŸøO£îÛ”Ùêh{Hq1e3­†¹²¦’wÄ @®CoY}® “ègCRRRê5ã:5ÛLVw?Fñ!ú2C^@¨O®Sÿäzög3¸uëÖ-–ºC0þ½`¹&õ'ˆÂø„õIÙŸHÛªÑ+wéÅfð¤Ý‡ä™^]#‘}<ÆÂ+é{0•£¸æÙŠs6v-}ήƈñ?CúL+³vKxx³€ŸEF+êm·²ŒŒ c™æïÑÍ÷sÙ ¯Õæ©·ïqôqëÒ§4ŸWA})/|h»wø|ÒDD@D@D@D@ª,n–ÛróêY•cƒäfy57¸£|l7ÍÜX&JzzúTê/Z¼xñMÔÙæ[Y)Ü@?Ä}Âê™ßàÖÁÐø“'LE^áIÔÉ»qöÞ|o§¿a”wà¦w¯Û†z…ã1ŽîtóŠ€T ´´43¨ýà}8á锿ɼVü½šËtµáZ²t´¥ [`x³‡G»8®…Ú=èã«Èµ¤1uÍ :“Ð=÷YÚ&yø/PŸ¬ˆÜÆ5æCVk^J½lÄÌ]¹reŠWœé¼ýŸõÿìĉÍHéêWäm÷Y^F!ú³mívDÆÓ^9‘B]c¯µ:ä6eKy}ÆkÆGÃx{ +<Ûr]=‡öÏ!ëò&bÈÍ!/խ熴͓Eüc½é–¹a1ôq«¦ºEÓ_PŸ×(#¬äý¡‡•VRFD@D@D@D@D JàFü{ô;ŸAàÏ‹² ñ=VGµ%£>Š›èy…Þ7Ë3¸AEddêÚ ªø¼ÕG¬†²U?þî2ì¬6c¥ÐqœQyröã—r3\×õuêÔi*¥KJ¡T,¶ï¢Ç£1nj=³ ±F©óŠ©Å2 rc¬®mqÆÈh++,ȵnÝúKúÈæZPC›Ç‘þ•6y¼í‹êóqÚþÙ×`ì³ó2]·ŒH®yßøô™å]êÖ Ú5­¹U€QÞ¶kKÒד\g3†ÏI×bÛ¼¯íÇs­¤o¯Â{θ´-Ô\;²BõkÚÎàaÏ•”uÁ;\÷¡ãLïžeiu¸€úÐÏ/èÙÂÚ£C4c{¨dñBõ)Îçeíù´ïÉ“«|¿¨•Cci)" " " " "Pé`(XÁhwVé4³›câÃüa†C¶&q“z,7ɶêñun¶íÅæl[§çFœ<{áÃBn˜·vïÞÝγ<‡´Ýpr ÔëˆlÏM=oƀы¼¥ø³mõ5æ&}Û×zoàÉS™ˆ@)`@šÁßãþþÎGŒ»Á°Í7‹¿ñ1äÙÙ†‹ù{L ¾_¤Ãx+m‡ ûƒùóçK¼1מÉÖëËMÖyõ,4OÞYVfÛ©©7]ž¥ígø5ÄŸb»v}+äõiíxø±’àò’Ý•›–Ï5ÎŒ”ϱj|º|HŸfP¼ÌʸýÞô#:}mÕ¸é:ÉÊ\‡¾o!s4í`ô>u<Æ=ê?Mþ–OÝñ¤7³R|¶ÛŽð~ʰº3‰²Æ<”ñœÁ»k×.;·×>‡Õø7ˆOBÎDŸvAE‹Ò‡¢;l×ýõèùã²³D@úçóÚ¾}»m…qŽ Jq5 ¼§!é]Š€ˆ€ˆ€ˆ€ˆ€Tf$À08§qãj7à­¹?“懈"~7ª·¿ooæ=†Ö?±ZgmÇÒv*ù÷“ÿ 7ŸSw’6ƒçf£¹é¿˜öÛˆ"îÙI: CÃV}JÜ^ qÞnÎwÒn4õözû´›q{K­­¦ºÑkX )WÆîE^© e¬“Ä…)Œ– øÛÝÇ5b*>ÀßëŠâ¨ê]=—…Á3µ8õ}ëp­9ŽëNýÚJÊb»`û´"¼|§ ×·_Þöéâtlç\²r´!íÌЗ縶EôìÙ³ŽÏÖrO™×Ðù}½CÆ^Ú±R”ëáÑœ¹bÅŠýyK)LW¬•óŸÀ*ÚÝÞ³(Ý"ÛŠPŸ@Ÿ2'p=ßÁ­—ó*Öd¤ ëGʉ€ˆ€ˆ€ˆ€ˆ@Õ"À g/€¨åóì?J{yÆòåË÷øæs3oÛ±Š&Û{SÛ€›ì¼³$}ë·þ);Šv¶U2ÏÙÖ@VÞÔÃ šœ—©Hy‘²<¨V1™—.äoü÷ 7aP³—׌À€ÕÙ߀UÃfµv Ž8Û¿/tûCfÞY¸þåá˜6#%¿¼¨ÆÞÂþ?£(°Ô=ƒv› Šª«òêA fõ¦F)" "P¼î8'æ:ÎéÞ±dŽtœþãz•rÞ w¢å3«K¾Øq>ô¯£´ˆ€ˆ@ذ7o*CíÊZ^ª&Q" F F£kÖ¬¹C4òÀpwê;ï¼ó0¹ä/ Ï/äÏ‹„ž-‰vëׯÿ¸K—.—dgg?Q’vª[u ÈHYu?[LD@™@=”k߈ÿ¹¸ŠF;NJºã̤~kƒAòÒKç5·ý\Ç©—æ8ïcÈldy„å‚Ò/¨žÔHD@DÀtÁ?†ÿ?_Vn"‚ÎÂߊ_SVB%GD ô0ÂMçÍÝ1PÅވĥ®TV×5áíÙ£H÷ÁŸHy ÆÌ+ OæMÛw’÷üµVF½¯¢££‡'&&—’’2üÎøÊ>hÕªÕøÙ³ggÒß8Ú›Ì=ø”Oºq\\\wÞþ3}žLÞ?È‹£¼)ñ©Ñž$^¨Cf ¦î½èÞìÔ©SoÚ?IzzfRf× §ñ6'mŠ_Æ8Y»víWÄú´q_Ný ÚE>BŸsÈ¿›ü?â›_MèP–JÙ¹]»v=åСCÏ“®M›G /&<…*ã6lذ [·n±¼} é3ñÇRþ åWP–†,{?¼ú„µðO"ó9B‡±¼HCÝn”O%¼t3Œ½k×®ràÀVÏ×1ÆÕÈýÖ7Ï?¨OÿºþiÚÈÇêQVâÏË_¾ÒáG R,?lÒHD@D ”Ì@¹ oa±ÝpÇÙÍ×-> ¦šaÒMtœÉÄ=ÊVY2Ì3`ºuŠ¥_1e«šˆ€ˆÀoš噓³ ß ¿_–Îä™\“oýXr" a@ã˜Õºzhµ}U"oF²È† £ÞI”}‹A¬)†Àÿ_Ž¿•Õ—C [âÂ(w5¡ƒ!í*‚½5:mРAˆ7Ù¶mÛmV†œéÖQës é>„ëRSS»1¢ñÙä&P§w­ZµÎ ÿ›0ÜYß…:d,¢ÞRt3æƒ~¶ƒgéºÈ™Gü}üµ111¡S;â{)ó>1¨Ö¢Ï{0’ö@Nwú싱u=uÚN˜9†è:ÓÙD_fä Ú¡ SUç9[åi:Ñß3¤m…£ÃêMž¯;KXù¹€˜ÍÊÊjE½íVV\‡Î‹m•(N3ŽšÎæ’ºcþüùÏ7ãâéV`}ÒÏñ¯Ä¨8˜¬(úŒµ2sè·Œ1ÿLtíŠ+öþBÛ茌 c™æï)óý\¶Òvµyê­Á{\Q}ºõüÃ@|Êëóò×AéŠ'P³â»T" " "P:üx]ÃŒhFJ{z;–¥1/g³u…¸ûðmÂgGézQkr P™WâïÇ7›qþ{|y¹¾ÿ,Þ ”ãñWà-϶9ò"'".ÒÒÒÌhöêU«ÌÀçq¾Ü9ž"Íeºe÷‘޶4a m?¸e´‹ÃW¨Ýƒ>¾±ºôS× ¢3 ™bzܳ´MòÆY´±k›Ç¡ÏËó¹¼svÙ¦]Ÿºfìó8Œ¥—p&c[ ‡çÐî9Œ‡ï7Ñ ÉË¥n¡º–pøÿ•+W¦ûÌ›ggñ.„‹›vˆ›áѶtÛ–÷áxÛ‚nãŒd•¤k¶*®sxÒrsÐ'Õ-tCôËñmË»[æ†%èÓm’Æý£é/ØÏ+O¾"áG ï=üT“F" " "P03@2sºÃJ m"¸ïy*M¸z$çëʉ€ˆ€„~¨³ÿ þK¼mż _žJÄç9ëÇú³~­ÓÃô1½äD@„[’w¡ÊÑ·N5•ìœIŒRçS½eÝÆX]VRFbd´•• –äZ·ný%}dcøª¡ÍãHÿJ›<ƒbaí‘ÿ#uÛX¹éJ091>õ=FKÊj’w~•Ù–åÎ;wdEè׬ÁÖi{€ÓÅÊ̑ގÜN1ëZÚBdØ9’}'P¡ çHšÑpÝ1dz9®á4žò'éo6yŸS¯[ê‹´ aÌ݇¨™þÞ=[3 B` Ô'ã´Õš-LL¢1›‘5 Ÿâ|^Æ—ïÐHïgb"å*û#‘PhlÇ—;ÎçOñĸ¶ãœ†¡Ò=çÐ+ÜtþÉqz+×Û.h½JÙ¯š‹€ˆ@U$ð{õ(¾?Þ¶þo«mlËu<>î^:Ž¿ÿ.Þvý¿/'"P0 Í0#¾F¬.§îÅ`5m¾ïR6ìlÃH¶CG|kqTbÅß­¬V|•öCØêܹŸbD´¿m‡-Õ7a´¼Œ¼zÈÝ`y”ÝŠáíÛ2MùHty™¶¿PdÛÈS9¿‘)g`C%2ß ÎÈ쀮lj¶ÿ‡¼µÄÍÝÌœ}y:}¯­S§Ž#]»v5f{ùTš™Qnq{ig¥•cL¦ÝdV0~M¸òzééé—c¬Œ"oUl|çÓ~<ãXÈ8î¶vÄï¢î«è²‹²Ï“““íå9VöáÓè;y¡¯m¤7³uz6evF¹¸¢údèôIB×õèR ýÇ¢Hb >Åù¼¶oßn/\zî¶zþárœ„Š€ˆ€ˆ€T ñŒÛbéüi´Ç(™ç¯(¥¼ô1=åD@D@‚'Ћ¦vîZ©¯ù Ãô4}åÊ—€ˆåD XXiØCS¬ÅøžÅjD%[=‡wb·™§ÆÅãÜÕ‹ÅmˆnQÖο>y“ð×Snoé>Ê¿ÜÒäݳgÏc *³<Ó¥ Ù…Õwó{ôè‡ì&nÚ §•¹éŠ‹êÓû7ç3;b¥hQ|ŒMaŸÆÏ ”ªˆ1ª²!à.ù-ie ž€,=¶'%vöÅîÚµkË¥mY¶œˆ€ˆ@øˆGµeø[ð¶Õ.(Ç>½0ût·yÛ¡bûrœ1›§´¿¶’r*¾>/'" "<ßÓÔ]Iiç—=Ÿ¼¸2k9 I×ãmw™VR–Ö"™‘2oµX‘µU¡ZÀ¸t!÷÷¿gUÝ&VþÙËkF° ¼³÷e*ʤ{÷î-Xy¶§èö)¶ÏŠLÿ27lúï´íÜnžÂŠ!à5Ð^ÇÎÙùïy‰RÅt¬^JE ,¶{›q‘?Þ{É¥ÄëpAÊ œÏ9·³Ä7†7kx³É²á9Hõ,.8wâ)dô¤]6_Æ”=E™-¶'¶Ä&!ùK·Oà¢ò}¾Ì2L =Iβkv$ʉ€ˆ€@À ” ä™õšã\ãc ´5çÞ¾p)Û½/)R€*ˆ€ˆ€TÛB}¾þøñö0èV|À|ÊËÃu@ècx;ÄÎd» ÿ^ND LÄÄĬâ¿1êœÁ½ý6¶Hw…Òp°µÚ¶aÛ6î|ã#§vèþ/ò9¸–J˃†á{ayˆ—Ìr"FJŒy3_[Îè—˜˜¸Ý–ts†ÂœGð†Æ[8ðÔ£'é®\æb¼ô,Yn×®].gV4ÎÈÈXÎSŒ—iÿg{«•>Kû÷»á‡ÆŽ‹ÃßZµje“¢<Ç9,º)?‡®}ðvöŽŒ”å‡Y’E@ª!9ŽÓìàáU9žÑ³-àöbŸôœovñëŽóVJ{@%'" ">ÌhÆI;í~ü:üËx»~—ÛÂd»®‘ÉxÛú· þ9|¹Þ _ND „¸¯ßE“°¸ö¾æ‘ÁS¶ëƒi§6"P] „ÜHig!`d¼<66¶éòåË÷ØaIJúÑ&6‰q\c"ç dó#/M¾~kOe¿Ãi³ ù1`îwó0Ræ¸rÜ<ÿ>Ϥ޽F=‡ÆzwbyFÙi”ÝÑ1ƒv‰¯Dç«Mgôjë=¸öTʾd…æ ø¬µm-uY: #ê£No¦]#òN¬_¿~‡ýû÷wàéˤ[’¿”:cmìݺu‹e9ùcô5˜²Xü–¶_Á“£Td-!ýewÑ&ƒ6FÆE¤G“^§kÌPK9(ØAó›§Ï´£X•UI„bvz;uM ”‹/uœ)¬¬LaeåtË#| åÃ'ÙÒr" " E¨ 9ŸÅsÙvîÀÛ±âm1'v8å±âÈV;ý o+&#ñSðÇkÎ 9ö#R‡²¶®ÒUÆ–æb,´³a: t©ð‘%Œ–‰«W¯þÂͧŽ.ǸÃâén™bä‹¥^+7MK^KKc ¬EÙHÒûHž‚ß›––f,ã£=‘]РAƒÆ”¿Lúé¾}ûþH›‰ä'ÒnœÉÆ›áõcÒãyÖõ5Ÿ:cÐ4ãfíÆ:,k¿‘²“ˆv¤¬'a{ÞHu±•‘߆`$KÆû.¢ÍòÌXÙ´•q.¡œ›@nì/b†ÎÛRgÄÛg»‘*Š@ ¼Ê VMÚ*3P¦Æ8εgåäS¤-NycVZþÓâr" "  ØÀæ6'\³LKÍ@h+(mÎûþ.ü×x›/—¥0“kò­ëÏú•r"Xtt8è!D@BO äFJ‡ÿ%XþŽÃÿ\Œö1h^ázŒ{žUšÅh—W…~²Y9ê^Œ‚“ÈVôhŒ„¹ÄÛaxPÄý›<“kò„€ˆ3x†µÿæÝıq¦ZÔa<½ Ô°aø=›Ág¬²Ì³z´»)*QYØ„ÎFØF°ûŠh/“Ê11ß“/ÂïV®\Y?RK ‡KÜc²;¸ÿbA¯ëáÜ:o Ï”/ìÚµk¥iÓ¦™‘Î ,™~†?eu Îþ’~rÄEþËÙ]&þ µ){'mðL4/I3&ÒGUŒˆëˆ>>æÓeíÚµõÈ_I›1íÛ·¯Ãž”®('E×½.Ù[ÉÏfÌŽ÷¤ÑͨjûNbœœ@ývbg<$W‚ÍëTôðʱv B hàA%ç½ ¯¤ôšøxR‚ïáz=]´}Hš(ÌZÎ÷¶ü?oÁŸ¿ÈçLÖ¢‚B@x¨Ú{â-ûrXö¼7§–oÿ{sOmÜd÷±&E-¯ˆÕ“8!P>ày¿#ÏÍ#‰ª¾'󥋆ÙxîµýcO$&òlü3ñzh'’Ÿ ÝV/žO~7éßpHšÙºuëTžÉ‡Sî=‹t:|·Q·‰çìäÍÊV:¾Mý-Ô/åYþ"û~ߤ8}ì»­ ï&}…çõ{às(‡ èjÛ·Ù7%l+º€M˜ÃéÃjÈúèù.,7›ÞÆk¥¿ÃÉ‚¼Æä_"ß‹|sÒÏÀ©—}Çü «mcaãÙDœš’’r+Ûé]ïý”-üy;,ƒ­cѪc0r ë£éPti|ȵo^ÜN}ÅŸ¨¿ƒº÷ýuQ6#l=¢­úü'øLcü£¡›ýâth¶ü”¯%IÛ¨r%Êï*ôy¾e<3ÐÓŽáVÆ0…1 ¾.ÒñÂÑküõ‘s'_~Ÿ¹}ûvg @VµžgÛþôXT&fÄÜHÉÅ ‹“öNxƒélNÐtþÇpR>mt$¥¡–––6#ç7nÁGxnç¤ÜÍ^‘Ýi!'í¹Æmà¿Æ:t8ÄöÈDF¯ ¶5§Nz&´(û‘.áO·Ëþ<èð6ù×14>Ãþ‘wÒÖ<wm£î<Ýf¶î0Æ{oþXÐþxÚ×§ÁÓf lÛ¶m]þ¤§óç•Gˆå ÝÆ·©˜˜s;·–åXªÍ¸]¤a_BNÀK7àœœZ<Ì<•ÒsÂàD_ÒÓ»ÞëQÔÞ yºA! „€(Zªôœ48Û—}˾ì{>0'¨ÚcÂMá VÃÓýÁØŽÏÊNx|ï”> &E­„€(Kð콆çáS}R[™XÓö€z ­Êɶ‹“n,ÇAÂÈÞx`œì‡!ï<Wm û·ü‘ 7ðFâ@r¬~áÂ…+èÜîÝ»¿#µ/;o ܶèô:>ΟÔ.™¼ýèfuüÙïáÏü"mnâÏp¤‡,X°·&_ð'9úh·¯Ðí3äÜMý§¤?!w2¯Â“r/üÁPÒk¸XÙ1²‹L3·­Òò…€(³{3j‹± Õ³}ûî¯ÜsÂÿýum¯£—-KWB¬Ž„úB@!%lõ•üMƒ‰ßr?"Ê&ö%ø†GÉ›O¶D_ÅÄl{’ÔÞ×ùDNìB ,"`ßX`\Ã1òÏ31ž}Í1¨&ÏÙ=0dÍ…§¹)Gž<'ÿ@¶†³ËF¹ÏÒm1ÐٵΖ8›‡Ÿ³½uGQî…á*…gí×0|!>ç"d_vÎ9ç|:eÊ”1<ׯÁa¨|æ!¸zç9Ÿ|&ñdbX#%¼©7¾óÑm\—.]ªò­ ÇHI¶ŒËaåç—´?[Fd<‰]àÊÅ–ñ ²Þ¢ü ô×É?þÕ°5˜q5•±™£ÔRòÀ%‹ÔŒ¤wÙŠOÒeÔÕ&5#åDxÍë f{1|S¨ëõèó(bôó Û˜« ·c²g¾J`õWÒ…à4ûDòf\5{ÉqD7|‰Þ/Óî~d™±7x—U»‰Äœ¸¾-B˜ ã{¼Àl ÍœsÂoC1ÏÊ‹MTAe5D.aâÂHicærÉxÖæBd.Ây‡‹ Ö ®ÀÚþ ´žö¦‚´q›—‡‹WÔ“!ô¸Œ?õAuëÖÍð.÷ËÛ†¬ãm¿K š?úÚâd–xÌw»ýIŒß.¼èTwÆŒ•àß é£»YOñá¼¹©é3:Œã6ž‹Dmxì”SÝù/ÉÊü‰të”–)–3šÞ‰9Ù|‰õÈxy™¸$lOô%:ž”ËŠZÉB@! Šç¥â2_Sד’½'#{R⒔㻭¨•ÉñeŸêájs! „@Dxv½*ÿˆÀèl ¶-\uæ”å«^½z'Œ–¶´û\hæù8˜ú“±¬Á¨¸½l, ‡—£5Ï`¿Ã¹¤a†¹Oµ¾î¢Ï]xQžêg>޾ÌVú·q^óÿ>Ò;à}œ¸Í¶ƒƒæ“7Á«²Þ‚ïPó>É;é~ùgˆˆf¤üZ&2¯¥sèjBlE¼žØºyŒV£®©îWØ8lIö Æq¤¯×tò‡‘?'ª_9mÉׄçsÚÿHþ`beÆÜ†¾È†´o®êPמX…XÛtBŸæäéxá‰ú›}].F·õ¤·øûèÄy5žãzÀcI_ÿ Í&ì?¯ûÛ*‰+|è÷*ðMGÉ{â^Q)( €½ùJ\ï«seÆÄ^µe ,4  „€B .°{ºÝÛíïÜëãøë9q˜”B ØÀ°ÕáxÎn`dú»•I¯Å¨µcؽ”Ï¡Þö t ‹¤Ʀ=§úÒ6ùö ˆÑDÛ î2Ñþ~¬¿§¡Y¶§¥-#7Â~”OÅðGÒ[ªÕ‡ fP¤î6xO±>é»q´.¤ }Ùܬ‘s0 ¾eyÂ2"ÏcáF<óÐü•ø4}®„ÿâhÆoÆJÛÆn ýþ¬-±žB´æ¤£cSòöÖÈð¬ïÏOÀ¨ç+q…[e÷<´ŸÁ~mz¨[HÝxò7¾B4ÃnMú€´À9ÇÒØt2c¥-+Ÿþ‡Z{¼ü«iÿ‹>¶ä} rþ ÿVÊOU©ReùˆÇg2û“é> #gCR…8A ¼y>N”B ¼#`ØÛþP,¿º¹˜<)3xFáF—Àg½sÖpǾu÷¤>ãË;î¿B@²Ž@åãûðHü æð¾±i@BfƤ^y–·âžËV?µ/qÌ00¸Ä{U‡¥ ó´¬\¹òf3Èáx Ê¿€‡àéËþÍ@0<Õõ§ +5ÙÞípŒz9~CX4ÝùhSÃÞaçž{î*ÿjÊ\í £O.Až‚ùÆáà´ÞÝrÎSídÍW§N !¶² f ”ñ0Lfü 1þmÆðù{ ‚ŒoÏ /-–y_ÕªU72þ:E:–V‡At^™-ì›"±‡úþ fc›ãd¯‰Kõ>ÿלb«Œzå DðNø>99ñºczDuÓ/Oðh¬B@! Ê*þ—’ã«õtÚž=ÙϳºPÞ$eõ`k\B ”!€‡Þ4¼ë`ˆ³íÜŽ#~‡œ-ÉŽ*ø=#£â fÂq—fHlæy™+ ÛpŒxßÑ–'“¬¤ß\J! „@ìÀ“ï<Œ€=°Ø2à§XýŸXÈøHMâ–-[lÇ\*æ"¨PjÀëuçÖ ¶ø¼Ô(]N #%X÷csÚ6| ûÛr‚»†)âÝ(ãF)"„€B@Ä Í b½:B –i§C2O·˜ûèJ8û6Æ\)P$ø·Èóã".!…B æFJ¾Øô!oHl©÷$<*b;ŸòtÒ[ˆˆ;Ù áfhéGìpµ¹ãÂk.ßÿ Þ¾ÚÔø o[®ƒ÷5òGŸÄ*>œ4W°= 5bkâDâAD³ E]GÚÛW±R‘;yíä…~ôlh=h{"éTŒªWšK7zØ›‰§W¯Ç=z©‚B@! „€B@! „€Q s#eJJJŸÝ»w¯Åè×£aÆ?¥§§7Åx&ÆÀkØ$÷[ö XNþ'oÍÌÌ|œò댫+Ä솶î}ð·$?}+³™®Ñ6SžÑµkׂ7ˆEÖÔE›k๓ü´jÆFê&#÷&â,d=J´úÛ¡×…ÿ è }KyFÕ¾Ô†þ éè .Ãöõ±Q”›„€B l ÐŽaœš¡| ¯^Vå0± ! âÝâøàHµ²Ïé¼%–£Ž7}b‰…úÅ@Ì”óæÍÛÊ»_Ζ1cÆdáYÉÇ…sžæBô>yó ü†üË6ø–-[Þ‹‘ðû:’‘Á‰2ñ€buð΂÷H<gX™|l³y[.µ²6G­‹¡³#FÉóÌC²}ûö÷b ½Æê0@ö¡ýש©©o[yÍš5wat4Y·[™0‘6S,ƒìôJûƒiß¶Í4h°‘ª×1²öG—cÍ3Óx„€B T#`_¹}‹Ø8£°ÍÖ"š§¿‚B@”^t(½ÇNš—"x~¶ý'ÇšÊìóxÂâÅ‹—[zOèxþ~›ÀF+Î`_®Þ¹sg;>Æ2;T?%­O(¢¡—­.@Ü nµ¢iãåa%éuà~6†^z¤ü°‹Ô¶°uáγíÚµkçTΩEÞ~h3†òÆù åú‚¹—Où’G ±ä»l–xoE½èÓØ žÖ®K—.Uýëºb” ! „@éDÀŒwØ.é£Ô¿%|ˆ£|¾›ö'>yÕ„‚B " {@)â¹} ß“°•.¶:³I¶óDân«ÇÐÛÀ)ŸI¬BþR7tdåä_Ñ%¤>ÆÔºuëTtNŸ‘—EjzÝF¾?yûîÆ\ÊÙäÏ'¿›ôoè:ÓÚF ŒõPä£ÍY´©FúX\†-ã0êíAâ_±ŽºçÇp“Gúc8tyûó÷hSÉK£í*Ú\ã¥Á³Ê[¶<}‡{Éš‡¥½¿ŸŠ-äVœÈ^!;ÐêF:^È<›¾î#¦¡Ç>ä¼.w ÿQäÇÍæó uöÒè0â VOjž¶!Ï«ó[}»žö’ÏÇ*^ëë]d$ØùBþ²\ *Ä ¸ô¤tÑàb0›“©£ýéÆÉÓŸd…k4Z~‚9ùò'¹Žý*íy-±¢É€>›x‚fVæâÕ›·K0T†5äbüýÒÑëJkcË¿·lÙò¨“­l©D-¯  ‹@Æ‚ûì¦cÆrEaPÚÏÂþJªý0nUÊgoÀϺ»w<ŸÏ¦bá(íÿyé_Îï[;'õžñ^oŸ¥áNò8¤ë‡E*•0uåùûuFôñrò¶Õš0Ä­á9ûE¢m·v4u5ýU>ê6Y•¡ßB¬Jö'hÿ4ÏæÏ‘ô£lÙ½Œüñ|O⫳g} ”f@¬ƒ­Áêm±L«#?ä;â^òÖ·)ϠAƒ‘ÿ|­hs3éˤ_%.!f ã@b ùǨ¯CB<`@×ñ´¹Æ‘è{+2NÁ–Ñ€qO~C]ºÕcØléü× ,õÞIænÚÛ<$dèÖ­ÛÙÕŽcHK°¸×$D‡ì±€“o(z{ð+'—ýÁ{„`Íéfä¼²aÆ[h4‹hš,¬ëËéãnþôŸ’þÄaô«0lîE‡ò9‘³íBÀëmÚ ä ‚½Î[‘Oý fQgëGAìœ ö,¸kxã‡úŽìÚ½@2ÔHÄ?~1×·bù¼xP%ZÃtñü4ІÛÃcÿ7º@X°`Á Ãy7ϽžãûжÏáG™¡iòäÉ}›NÙY‘I~yljù=iSï¾ mßKä/‚ö­ GÎ;<ÓŸFöXòÁ/TVA©ê=‚ºã‰ÿ¤3çC7óìUµjÕ XÉùùØ.'5ï¿èÔÖò‘«Hcpm ï#ÈŒnÉä탾+0U\Ę*ðqáౚº)Ð7AëƒÌ\ÆÅà>ŒZ²—[¼eú[â-[ýwÑÏR²àÏ"5£ò]f!„Ý.êC/ôMèܹóRö­9‹9{CB¯3wîÜe`õ>4ÃíVtšCùêFÓcÆöüß ¦3™§üʼnߦóçMÖ„d±Dˆ #%'O5wÔœ| ݼ¥”‡ðgxk} w/I£cÀü„ÄþüN@ÆýnÞRÚÙGsrûpbŸÌ…°­mi6×Ù€ìõƈŒ§úöí;bõêÕ5½}!ëŸ^AÞ2yû7µMY?þøc3x¬ôäå´ÖÛVy!_vOîî\,Í@yÎ¥wç·¹ø…@Ü 0uôÒb¤´õ #XO’`o³ úÓÈf©Ü '™DÜFTFÀ ”º>5Œtˆƒƒ „@|!pêìaõâ>¯Z%+{ËÈï±zLö<¿žç|³o$óÜŸåy.Ÿ…ן6}<›;²)›ñÊg†J‹N ÍvÚVỵXžËpçò§ Ý¥ÓŽ.þz[ÒX±bÅ$y¯ÛºÉMtËáÒ¬¬¬«C'ó4[…ÉÄòØGÜÕ ŽÜ&MšìåVlß©j+CÍöaí,Ð7’`ŒW@iõ‘BõêÕ;at½çš­ƒhÆÓ“ÑÍ<_£Á.×ñ¢mÇÑçÉÈ|‚²SÏq2ïÊ@ Îï¢7[@IDATÑŸÔ9&¿$òEqþ8} ËŒ®U*S‚Oâ˜*®sÿÒùØM8žhèœô9ü Îàu6o[æ²4ÛÞ²¼ëãˆðïMï¾°ôo´?YPØ‚îæ2® „€¥KPµå`~lýPA‚Ý ìµmGŸ¯.¯—mBy}Aä¨B@”8º”8äê°<"€ah!ãîÉ3ô03TQ¾ÔpÀuÖI'ô3iKó˜3u'a Û m´tH¡Õ#­½—ñ`ü cÜ dͦxrÇÀ»‡¤ã1$:/‹¡Í Ý`Vjކï!Ê(ŸŒã‘MûÌ ¸œr"¡lÿö®y,B›‹ŒOÛ„Ñçkš®¦ÝÍ´YÏá”{çÛ·*è‡lþCZZÚŠ•+Wþ„¼Û‘a˺ÓÉ·fÍÿ¢ÿLú»=ŸfüOb ìG¹½ÌôôdÆ×Ë0߈íÃp›mâwÆÚÎÃuÖŒÈz‡ïƒÇ`3ü3ÄFD3R†Ä½l)|Èã…!xõ'Pÿ ã[JþòN¥¿ÅØmö—BüÂöü¡í2¯a6Dó`R“ºuëÚy¥Ђ:© ¼]¹Šú5b5þ³ÁUEÚG€W”·bA°3/MÓ#”¼éW˜óÇÚbÐüÆàÛ8f¶Ç¦B #e„8WáTô›ç:– õd¤,‡¹LÒó€×ãlŒv_‹êù²l½w>B'x?Êq²êPœèæC¶îùK¬q‰€îQ–NpÆË= j¥óÉøüƒóÙFìB Ì!€±=FÇþAÛ…§ä­A4‹–Ð߀ÁÕ>ª<¼_-bñW‹u!Úº)oZpr¼Á‰qT¡… àO?ÒfÞ€<T¥bô˜GO§èÙÅYLÌ)&¹+b@§XteŸ§¯öùîûÌý¢l‰Ív:µŸÁ6$·åGlQyÀ`×Ýx ºÄÇ‘˜jH !P$t*)Å#D÷€âÁUR…€2[Òl{kzÃvoAùâAìÁÕ;”-aWˆ#bn¤Œ#,¤JhÌý½¬¿Í =rQ…€(.âùšò1ƒ>ûAŸ¯E/2Îg Â0Ú®Û¿ÄÛ6ƒ_XQ±jª{@¬W¿B ì" {@Ù=¶™ù@Ù°[T(aØ^`| w©î¢D .Œ”X°+ànû i,Ú?±'Àÿ±'ÀmÚ´©Ì†©OA·¯cÙ[†Yì§p{ìÀ³?ô!DÛàÚè¡o 7nöM8šMfm#Yû¼ý6úyš‹Âp¾Àu¿š›o]ꎨU«VómÛ¶ufËê ËpøÏ‚÷LÒú½‹ô:ê¨{=‡ÒÖ¾þ!ôéäo!ट‚B@”.rP÷?~Î2…Ðý;Úš ‚-!)JGyý! ʺ”£ƒ­¡ ! „@ü!'*ÙŸ6³áëqú¾Ç@8ÔôÊÊʺ‘ò‘dO©P¡B{Òù ý…l¬šÂƱ/`$ìC›¦ÐÚ¹s絤aÆÎ7‘5ƒ¯}5¤Ýí0>´ÅÊDÛâ3êïÄ@Y—þ_„ö0ñlú¹ºõáày1ùÈèE<ŸºKl¹ºÕšÂo†ÌkÈÇÓR=G9ý! „@ÔÌ…sâÓülŠºI^F3pîõù¶Ü‘·V! „€ˆStˆÓ#µ„€B ì#ž”À¼OÅÁ76¿×0þÙ³¡ä8òo-^¼ø×V­Zecü#àa|I*ceu­àù‰Øë¬³ÎÊÄ{Ñš… ´½±Zµj‹?üðÃ}'¿Äh¹›xÆF23éÿ>xÌ#òzÒ/(5AìkùÉ=–7%É¿7n¼ÜÊ|ñk$´nd—X™üÓìù¾å„@Q#ðãs}¶é¼‚(­Ø9\ŠÂlÔíQŸ¯Â“Pú?´™·¿Ý$› BM„@.tȇ ¥ÝJáA“ÊB@! Jx1RþâŽCŸyØÒnFÈí,ц¡°3©)-.›6mZ&ÆÄKàÊ'㟆6múôé7Ñd•µ à­ˆas:FГ¨_Aœ3+$B÷‘_G´åÌ#réþ¬ó»ØÍÛJþÁôôt[ níÌ0°Œ"ïg£+â@`Åòy>‹ B@”?ÐËÈ×|¾Ì=¾Y>º´MïÝÏo÷—óÑT¬B ,º„…FB 8Ð= 8P•L! „€@ .–{cì ùµS “#©cuvbg<Ó‹YhlL•*Uš Íž;“ñŠiôP#çAÐ'#Ë–|7Áã²5i6Ñ‘EÊŠ¼ýž¥”ó”õä· ËõxYÖ°x½0ÏrëIr<4e…@Q `窢0(+ç@Qü'JBÆà}>ß÷å³§GàßàóÑÔw-Ñ}–O)b¹(+ÿ}C÷1;JKÐ= ´)é)„€e¸0R†Cƒa}ê¦bT\Ù¶mÛºO§\oÈz™™™éë`¨4O•wá ûÖää䃩O¬ZµêXøÇ ³'mª /™4WHII™ ½-}´0ùTÚYÝ0‹ºËºtéRÕ7n| ïÌÁn¥R! „€(Slb4C¦ñ­óð¾´ûPÛgû³úB@Rˆ€î¥ð Ie! „€(Ýĵ‘hÃ(øFÅ9|Dg<å©”›a´\Oj›ó-À¸ŒtŽw‘† ‹-ZEÅh ŠK‘5ƒåyÄ%,'oÜ`îܹ©»“º±Ô-%þJ9ËøØ¿rÉ[¶lYƒœ¯Ð¡:Ñœf„€B l"0‚a­éÆOí(â©ð°4à7’ü:`ÒDA! â Ýâì€H! „€(ÛÄý’ Œ€ kãio3ó„:b†Å<!æ¹yóædí Qíø‚w}Ú’ðÙFÀ¡òÊ×±¼»“ÃÀ_¯ÆÇzrfΜ¹Ó¥)B@2‹@gFvF>F÷?x{H>ÚˆU! âÝŠþ¸ØþþZVô¸J¢B Ô#÷FÊ’FÏÌ*xN~O¿ö±ƒÝÄkðÒ¼qÉ’%SJZõ'„€B@! „€(cÈHYƨ†#„€(*â}¹wQ3j9æe‰‘² Ò‰–ï.eÔð‰Q! „€B@! „€B@! „€B@! „€q‹€yR*! „€ȃ€<)ó@"‚B@! „@Q"Àv:TžíOÞªU«m¯vB@! „€¥íIâ8ñ¡ûŠ÷>–soˆê˜’ø°O¾<>ÝN.¬ž|¨ƒéÃG‚žé Ôy©DÀ8Ùá÷‚(oœ­[·®¾xñâ? Ò^m„€B þ°k=sûÑôbòÕØB'“tr“&Mnÿå—_*edd„¼À÷1óœSÛ¶m[7++Ëæ(íi·t uÏS÷†žûÐx’Þ–÷† *4äþ²Ö¥aàl¾oß¾·iw¤K+ÉTó­’D[}•´'e)9PRS!PÒT(éKC•*UÁÄ9'Þu-¬žLø;»2N)ãý`lj~œ/¹81”è“6ç“̘ýšS§PŽàTÐg!?åI+W®|hãÆöÿSB@”I˜çTÇÈxYåÊ•ëÏ;w£ ÒæÌ—ú“=ÑÊ®1OÇ}eè>î7çÀò3ó)›ÿ8öK¡wc³Õ¥1_Év帴à”ùLòíšÛ•¾š‘·ùã±Äïñº¼¯ËEÞ6èx2r`ndóE›WšqôæA½©;Ž:››fRÕü|Æx•1”lä¯ñηÐå‰àyÞÖ­[›‡šµiÓ¦òž={ž¢¯ôU™8«zõêWÌ™3g‡Íû(¿Cݽè‰ÜË‘q>åK(ϲ¹¯váQB ”"Àœ±âúõër¯¡¥tR;ÆØy´nݺšf‰±*ê>JÊû1‹¹‘’‰_“µ™P]Ë1ûŽ Ö뤵ìøQg˃0µ·ßÉð½Âät6ù%Ð›ÒÆ&b=iÓ Ú»LßfRV“¥AS¨ÿù[™ ?NÙdv…V—x¹siS Ú,ÒÿA;—|_ò']ˆLãÛCÞÞпJ’‰Qï$&µç£Ã³”;X˜(öƒÿJäöGÆv“É¥ÿ½ÿþû&÷èWRŸ ýÕ)S¦¬ƒö*z½…쟡·¢¾u“[3h•‰6FÝKüñÇ!”_¦| é h6±vu è =$ðÖ¡îyúèLéÈÆ>‡€~ƒ¡Gý `g|“ỉ8 žG‰fؼü7R0ŽBS(‡”æN;\œãvÉcì·:®5¶B®üßkB{‰‡ÔS‡ÿ¹ý'yH½Ý_þˆr?þSoæyabÆH¼ƒ^¤î<ø·Á÷²Ç@ù޵߱cÇçèÔúx¦“ÚK‹ô¹”ꉧW¯§Ïy¤¦Cžþ‡ö¨^À˜ ! „@I À<§9×¶uÁ×\Ï~¥‹×ÂS`ø4˜ £å/>Naþ4À¥1‡ù£ãr·l)´æ4M,O:„äýÚµkŸ¾eË–”í÷IVç®Å•‘›æ–Imn–je“…nQ6ãáцîڵˮÙöÂ=ì®]»6÷ηhw410ÏãE´É9ÿbþz#r$ž‚±ó`îK¹w\Hùú¶yßEÌO;C¿‰¾Íh9ý ÷w1nžAyQA"Àµ%¦[c1ìƒêv ìóÁñÿÿ…ëá£^zIä™3ŸÆõ&‡kù‡%Ñ_´}€Éz®}í¸VÖD¿"ÛÞÃ;^{@Ÿ"Ù®°ÛøŸ]œ-à"aÄ9|6Ïö¿ý'•þÖg¸óç{)¸“sÄœÐò¼ÿ;ò-8®æPuT¾EÑ]‹uu[8Œ"©æ=f:u:Ž“{]~¯¾äWAïÎ_ºõe%MŒõ@˜èÃEö N¼±Ä¯ÐÇñ†4½8!ü»qãÆË‰ËÈ„ÖÔ äãâü5f"„íLÔê3¡ë ýh/ÛÒ" l÷R>»C‡‡X#úšd\ê?$oÃ7Èß$øÚ8ðÉкS÷ðÂ… ×{î¹vCxœ“%—qž>ÐßÂX°ÐÆÀ±å=ÐÿY/>?&?Šx©yQR× {+¿†:[n½’h7"w&´û¨›ÈE¶ åo hŸ“ÍxBêòàÁ÷ÍèÓž¶Ÿ°\j'}އ™7'üö†=‹~~‡Çúþ:55õíFm`ÌwQ6/ߢE‹VÑ¿M¼Ê1‘89?¦šHœœcߺí9/N.Ð,r?Þ­sSÎ×òÁœ‡r~¿É&p qùÙÿ2•º—‰ÒÖŒ•]Ü:^(4F7{±1ö ºÇ^lðû#´£­ÞÏkí,úðniJ]}þ;¿’:/k7ןæÚqЪU«Ì8yd•*UìåC7øî·vü·ì…ŒëÕéà¶™¬µ7ÏñkÈNþâNþ¯Ç óYh£ˆfd={ápEÏçŒõa«ƒ^—1ÜCÝ/$>Bù&èö¢ä}ò'UB@”$öpÿ{A;äW¸-Šö-¹Æ]áF®‹'FjÃu1¹Ç`lØ­[·\‹ÛFâUGû}\ËsØÄu÷1ÊÝÌë!”ìàù–Ƀ/0Ï£}Øù÷qW AAŠZÏ ñ"úöæ^1ŒûÈÑE© ƒbÈ”ÔÿÎJPßV·ÅÜ&æ…Ñ{̼ÊxÕ׫{QåsÛŠJh>åØºy¹a±›á¥’·HŽ>›Ø}âÖ3AüÍÍ“î ÎŒŠöð¾À¥c ü öf–Ún4êqëHwÁëG¸e’Ï…e3‚d˜…¼Ï&š”í Dp8’zó¸tD§Œ ©\$ºP9Ÿþ/Ãb:Ú&›H:òêLÇOɯ#æX7F3pðá"³¾þN£ ŸPxpboC³ˆ£x«Þ&+‘gÈ\™‰ÍÁz“[Ÿc7­KSZ®(ô'èåñŠ ¨=pÖw霗ö¿[î–ƒSêœl§0bÆŒ#ƒyø;Æ~nÐc­ŽÿÃkœßÎÿÈûbÃêx3y/üßwìØ±Å¨?• ³0ÒÚÃö¡þ9œNûiÆoÃàø5Ù¯‘í¼0áÿfÿáz»wï>±Zµjò°YoæÌ™;íÃM{à´­+¬ýÓèö~ûö톿ÿóf 4ØHû×ùOö‡çXd¬Ý¹s§½pøœÿee&7Ëhw ¥B ¬!`ó ÎÿœóÞgAg˜Ì>â=€ÿfºøÿÌå¿ÙŸÿ} þ¥m«†–Ìÿ®¶q0®'Il•¡½DßÄXœgZs~á97ÏbðO…ÿ®ŸÙ5þ§ÒÒÒN±í1p0g”õÄÚàhוÈ<‘t*/n®äÙo7<¶%Ùb5øl«‰xr÷¡l/Ö[SŸCS{vM¦ÝÕÐÆÓ×Í&›¼½´ÏµUGs3Çœ“©·FOÃ?ÝŽƒöÊvMïGü„ãw²_#o÷'4W Ÿ†Èù7Ä–¤oCmÛ{ Û^ÞG¥¼Áû±ÑÙâ Ì3=0^p>ù{©wc¹v[I/w y{Ù”ËÛÍ«g¨­B8·Ñ6W@¶_íž•k 8äÛ7òàÎ9ðOêÌy!ƒ|UôßàêOyuoPw± 1°u²:2ög ™Í"°å°ç¡Õyíš¡ïRhÉ¿ÊKÁ»¸çžA~ Çó|ã5Ç/ΩèÔ•ÿëf£ùqµ{º³%é3èY}-íOûŸàÿ?»÷R9nx;ŠÉ³`Ï^V¤Û.FÛ¯W‡PyçϪ¢¤hº”a''P>Ö“ßÂIx=`×°x äYn=Þf¼›‘w¤K4ƒe›Ð®6šÿéVGL91·Ñ¶:Õº.#'Ýù]ºt©ê–ýéïð&â\hZÃg:lFÇ¿¸¼ômK|Vñ§ßí0þ„ÕÝ:R«stD–]üœ@›µd2È›¡1d…'íÅ0_ÅX®å&gÖÁÈÏ5Ù6aômÒÙ.Ö–Â__ÊP—K¢=p2ðÀyî‚`礰ç¥ËÇùõ ¼!8¹IÙÈ ð=ϼ£9G»u¡R{(D®yJÛç§ÜLºóñŸËcìwyhk7àÀË»éQv^l΀ïT&¶áû˜òBä·ƒvqš+l¼“dç… €ÿdxÆnß¾ýö»/Ø ÛmÏËŒŸ-O?Ièës{aài`Þì…ã°Ÿc] ÏåÈ·’(;“U1â ?! „@±!ÀªŒïn-½p¿èεìGæJ5¼ôà<×´/ µc¹t%o/Žžá¡æ-/-?y®³¹>wáÅQ#æDãÑeŒ½ òÊ€ní]ùÚèã;5² «·—¹ÔUåÞ°.ÙÖþÀ<Ùaç_ÈI=ê$v枘FÓyÄ€^9&WA”ìÚÁu`ÿÕö@ÍQ¤7Ûž\ŠÇþKg#ç0ãçœêD²Ç5P-øg4‚=næØGûïÁk¨#ŒÛª¡ «Û"³èòG‹x\ƒ‚ç<¸žxùËØpi®cF9ÀÓ®ÞÕxv=9 úiï!þÛþ+‘Ž¡µwø¹Û.>Ìq:›ÿÔEȳÿ{DlþKÐ;×*Âhûuû”:¬H Å]—’’2“¶µ ˜ Œþ.õôiíË\£ ®¸¯q·›EØX³­£ý‘‰ ˆÝLVÌ›7o«•óüoç¾å€Ù²M{go~Âð¹;H·лÛÝŒüqF¡ƒÝÈfC¿ÀÞöA¯F¾íó]A~-o3þÏäØÛ»(¼Dnñ̃Þž&›¼]¬£´7´åüùÚMÝìOì°‹Ô1¸"×t=ͯ‹˜½1¬,±>͘ Ýnœ åRþÀ¹–Cg“=7xªa_lð¶ëS‹äç?æz`å6L\æ¸Âø_åyab_§åÃW÷ú_üvý¹~]æ¶ JVdÚuj/×ÅÆî dFþY®?_8ð_wdÉUQ!ðÖÉâšiìoØDØ”`ªw ×χȎv½þŒ*¤¥¥M€¾ž¹Ÿy¬T·ùˆÍMy!2ž Õ&JÚ¼úÛKX²ŸA^&×gw^äˆ`Âo{q7p· ¢>xé`Í©S§žiÌ#ú‘,Áˆhsªp²ó-kã ôvþ…n6‡›Š×éJÿKw38Tð¶W^”7ø?Ú‹ºD{áü£Å€ÿT©Ùªqšß,z÷!ÿׂ¯‰oBZftó:ƒÞ‰ú<[ˆAŸŒSz3æN„ÖÎoH8”gÃ/¬Ž0‘ü®a?‘Ÿo*³UJI´oÅõ0ãP/¶=f–ðd!g;ϕ֘üdæ©cíY“üH!·jCÞ<?Á E3Þ} ïnŒ@ŽÁºLd ±ky3â–Ì š3öàÍŽqºü/–:3÷5ï¿5´ä¯Ê“D£˜$×g‹7!ö 0×x­ƒH¸ûØŽî÷sŸ[‹no{ ¿.OBßUaá¶!áYÃŒ}!·€ƒ>¡yp·ûuô¿ƒãå¬>ðvN]ž­âÀÔì!·€CNÈóÐ+Ó“ÿ &p\?3 諯_‡©ð8÷Thçßõ´qV®BÛÍÙ’Î_·9ƒí¾~¯As ið ŸgÜþ6„óÖwuÛwƒë!kÛ n3&޳³ºÍòðÙ궉œ‹ëÑ;ì9 kÈc-Fôcv <ÛF:f¡ô¥¿¡àœî¿.ü¾aÆ´HÇÐÆèp)Òm£í×í?Rs#¥m¨¸wÒX]Jü•r–)ÍlÉlln½~ÅÁ¬N|ÄêÂÐê†rÑûŠ ÎȺœrpüQÐík‰·#Ë–|¿‚N7û—}šbP°·O{1@¤cØ[NÞÙ?úƒ´I²·}Ѐ¾I÷ƒf,$ooŒîBî\tÌøq“ý‰¡å \Ü–qÀñ¶p2~¤2¿“Ó7‘ÝüÓ×2ò¦Çaf8åÍÞ”§n¿ï»éçSøl¯»{©»ÊtEÿ“¡ÏÉ¥˜ åÒüÀÉ(¬±Ÿº°/6ü7(Û˵»Éà D4CãWþ‰ZØó¯Î+˜Tý‡ÿPrþ£Ý¤+ù¿B›ÅÛû`l/d~†'—+Wš`›„qýû‰ÿäÉô_R¸Æ® „€ˆ+˜[ G!Û_û涇¯-IšÎïMRÔ®•Ì£Ìx/uW0ú9¶¤q“ø™j®žyÜ=ȸ }>eÞö-|ñÔ^àÇößÁ÷<›¼ò¨û ]çÚìÌ3yÁd/€mÞR¶w¾å•cùHó/ª³‡Ðas±ñ”§Rnfí„@yE N:öÜ´„¸–g´ÿæþ?¹¶j m`«êÌ`vUŽõCŸëˆ9–‡¿1ÑÙªÁV¾pMø†º†Bânú„ œS¿y꜕`àߘò¼†ò<ôÈdÿB·@»Oˆ‡[`œ­'¤±._„4plicžÐ•—|*ÉÇ]Õm~ùaÏÙpÇ¢ÂÈtçü7»•æCs0r Ѥàé\Kì|#Ø6 æáݘòÉ4ÈÀu…ºÅn=íSɇÅ6¿çŽ+7Ú4â&Z!…᳷뀰‚ Ac“Ã…ëÊM,ïËÞÓ.®Lhsl?7£[`‚šêdü?”o(5„›Âã€WËòf—ú?ݼ¥”rË´·I¨ã]ýÝVòê@ßäÒ½éüùóÍÚß žƒøì6cŽÕû½7»â…Xƒh5á4¥¿ydÛ›qÚ›¡Ö¹1f»éã0ù¸ðŽ@öóLÖSü}95Az¦zÛxñ€ÞœkóAï­vÑ¥<ØÏ»Šr]öð³7‘†éSìÙ0bõêÕ5½¸Ñ¿fÌ^¡œ#À97œ‡¥ÃüœUù¯Ú²â±<  :4öÀÉ›Ç~L,^°N¢ML¾å¿1¹…zàd²÷"zÝÄäç0dæyà4c?×רo:;o MgÎï´u_lØK’ Æx±AyånöŸ Ýo6:O³¶¯Ó¶üvm±;G:^;oûÛ|ˆÎéx|·b¢cÿOø/¡îmþóÁÈ^ý ç¿ù)úÛ2˜ ©_ ­ùI¤=ì…“Ç€ e„€ñ„€®r‡ÍC¼s ¯Žþ¹=Dç ÌyìÁ¤'ׯDk¯—‰k£y|0Ø=¦#l"v²½âÁ¼þ¼ƒ? ÷e6¯«[·n†ÿÝ­²t}Ïõ·s;{`rB8Ùöqw¾esA˜sÍóÂÍ¿Ða×ùñ\÷kÓkJ9u¯ÎüíKò2÷µÝ:¥B ¬!àÿ?¶²}æü/~ƒ‡˜Í3 ólc×^ìap¶j€žmÆDŒMÎV 6³m Ö®][ü•ÌÃlˆ:ÌÃÿ¼+A9fkKO[Çnae𠉻‡7d–sÊ칲ž×`ò<Ì%àÏB½?³>û~Ç+ó,4•sò%–6Ÿ í{Î…_=|!³ðåÑÓ¡G5n[Ýöûï¿ßË9rKÌ{rüžD‡ÙIpTˆsñ@ç,íBctŠ#w[@³ý˜ñöhŽï*Ëç'ä÷ze£«y*_ìÒ(KÙ)ÛÂôëö)¹‘’Ú›†9é_FÑÝs éF¯Òv±÷–£ÉsQ·§ö¼W•h‡à ž†`1#ßïÄü¹´à”kõïÁ4oÙk ôÒCÉžoyù-nþå¿ä2P·UY”GÂ(m®¶ƒÓI`²œmÌ€Xу»Uà ý ;[5`˜Á6oóŸy›í{k«üÌ£q1ÏÊ“Ç3«mÕð°m•ÅïGÛŽïGh<íëÃò4s7g«ŒP§£×(kMÀa¤%²?qyÉDûó0ú½‹±å äJy™m!FŸîb#Mž­­í-þ¶3HoåÙú![½È8Ís³~/μ֕œòb¼}تģÀd1Ïéæýv…ŸÏdT nã/»[µ±9®mÕ=g†—8&‰¶¥=×#¯ô*È1Œó캥3Ö¾4~ªyäys8™!õcî}òÜ-Þž'ïnñ6#wžñFœ b_±­BBqp çá Žq Îë9Çz*ù°XÚy¹p§þOTYä„=¯9×>b|yÎÃ0‚O3ã1X%²*¬'r'Çß>âó>åG)¾¦mØÿ]Tã¶Õm´ëŹÜô?_û³º¼»º-Ã+›söà‚œ³Œ+*Œèßp¶mÇðB ‰ãi/]ƒ¥WoÞ®yáôõò!7ì1ÿÀ ®3yqñ,ÿ÷\ïÒ‘q©GNTØzø#^½ýzÛ„Ë›'SL'‹y5µ@ ÆòÝ™ÈN‰©Rê\"PØN.VEþÀy  ×›=ž7͹Æhu…S.až:ex ”n•×3Ü¥ySÿVŽÒK7ý»^²òB@!Pø'òù~ð+ÕÔ… Àúž'ŸáaþkŒXfœøÆz©Øª1œ‰Qj–«7^žƒ,Ï~s?`<ü”q|feÿ¼÷²!·ãÔV5 kü´ûˆøc¨)Vï{1n8R^Žæ3}î²zÒIž€nN ¹ý ƒg«6ó&‡>CÌR TóÑá<â®§Ms ÈGOxÛÏÐ7ÍnD^`Ùy81áôóó‡Üâ-Ôx„{¸þÃÑÑ+äV!^~ž%Ânw€qyÅ0ÁÖέ[À…;C 娬Âxü™m[Eý&Œ•ÏyøÞáxýµJ•*ã<´@–cØ’.@ ‘ÉǸ_§?[­f[¸|¨ä«ÛŽövQÐs6ZŒ0†ÜЫC˜¼»/—¾^ÞHÇÐËWÔÛ.FÛ¯Wå…€B@! „€B@ÄŠS hÉþ«º1o!3Rï¥Z OÆÚà ™ËŽÉææaË•µ¥Ù¶E."Œ4 èr r0opUëÙRé`:ò ÖÏåñ\ëÀËóÜQ¦îļìèbãöÒ¼y꫹¾õÒÆªxi…͇Âþ@2ÃégíB³Hã-JÜCÁcA¿dû˜\0ÝʑƊ?-Üymm"‡^™¦+:ÕôÒ,ÏùÝÿâ{Átoù@ÿ;/o´ã†/Ŷð¶µ|¨sÕå)è9-F¦O¤ë‹«‡7¤¯—/Ò14>þ;i‹ÓÝ6ä/à¸ÌqË–F‹­·Íúõò†Ëù…,\G¢ ! „€B@! „@¹GÀŒ”ƒKÀ[`8|oŸ£J²_õ%„À~ÌpÏßp©-mÀ*¶yÂ&v`H­‚‡©y–:Û.’:Û.ÆÃªæ˜/÷ŽÝaQÏB@! „€B@!PÖÐV eýk|ñŽ1ÛÆêW–Ð_-eìÇ@Û.Æþ0H! „€B@! „€ˆ1źÜ;ÆcS÷B@!PäIYðÔT! „€B@! JÛ³1xßÉ’Õ äzc·Š¶÷aÉõXzzbùp½Ò£­4B d¤Œ%ñ! „€B@! „@\ °qãÆG³²²ŽV†?ü Õó%jòÈó´Ìn÷šÁÐÚ#w%ž8¡ ²¢mÇXÎ^¹råV¾êý±ÈõQ¯>ÑÊ+N¾hñöê]XYÆ2N*ÎqI¶%‹€Œ”%‹·zB@! „€B@"ÀqÿJÓ:|àai$•*UÁG:ž‹Äm}±Þ‡0Ž:ÏÏIII݈?DÛ¾ |èß›=ü†±ÜÑsæÌÙëÊ ÖÇ¥Ç2ï`½ ‹cÅŠƒÑÐXŽ[} !P´äzS´¢%M! „€B@! „@Ñ!°o߾Ǒ0>âI÷$å‹1VýHÜÄ:~±Þ222.ÂÀg†½ð|HÝtên!€¶ /¼gHS)φo FÏÍ”}xHv n(üi'T¯^ýx3޶º;v|Ž'`{tA¼Ò÷~þ›áïLù#ŒuW/X°`^·!'ù=¨;‘tjrrò• .Üm²Ü0hРÄÉ“'_MýUð }d÷îÝv;å )g U¾L~‡Û}Þ±¼«mÇÀÆ¿Õ{÷î}–“¡o£þiÚG÷ãÈßm+é%Ô¯!)FÐ/1þ6£ÍÐŽ%~_¡B…ë/^¼ˆ¼vwÀ?Þí`5â“O>yÍhT%C¿úxð^ãÁ{uSˆ·R·}îßÁzG°Ü6Ïg|céOARŽ€<)Kù”úB@! „€B@r„@Œ}Úx1”]KÒCÙÈ^$ßÍè ÕÅ@vÈþ’¯)å3)_CùsÒÉðÇg¹]Ëî4> u‡’ï(ŒfXLÛ¾}û@ŒlÖ~OÇfÆÌ#hŸÂ^‘±CNAÞ4ømÙñ–¡¿n¼ÐêÒþnøž ØœrË={öôµ:oxÿý÷M§¿Ãw=ñ"ò—M™2eé¿h?vëU«öå@¡O®ñÑÏ›´›_CdÞNÃ'Ú´iS‹| ôþ¤Û©;ü'Ô 1ÁŒÛÒ÷k×®}(ý¾Iù£cìGr%múCïÏx‡Ù¸ÉÛøn¡îd½keä9x“6%öƒÖ‰úaÈzÓ° ¡w¡q¤;:„€(ÈHY¢† „€B@! „€(ë`”<Œ1îq½1PõÁöž}_ߤnY8 à{Á‰Ô÷ ~ššúv£FÌËÏö°<ÇÚáIhÆ®Èzɼ!YN|-õ 7n¼Íê1Dn¦ÏË[À Ù¹ß ÷eøWÃ{/å³;tèàG'âA8…úŸ`ŸAÛTÒ\þÿƒð2| é÷cò£ˆæÝ¸‹º Úì`©÷hJxñ!c=mnÄô‰E‹™1òKêvc¸tuÚN_÷ã%¹¾·‰æ1jFÕòÇlÞ¼¹a·nÝF`më§÷þ–é‡ö+Œ•½(ïñ×M6F«³²7À7]V2Ž1ÐÁ¸Ù)”ÞÖ¦08¢öZâ‘Þ¾•B ô" #eé=vÒ\! „€B@!PnÀð•†Ajƒ;`òÍ0Â-uËÏœåÉnÙ›â5ù³•iÓ˜Ø<==}“E¼ü¾¡]C< §úHò‹ÝvfxÄïÒÝ9¶\|[†÷Ê›Yúl²,¬ßŸ8ž;É'»e75è}>4·½ËvÀÔŸ1Ò¾"KÁ§³ä|†×QèDuçÙŸüoDÇÐ žfüt¶€ÃkËËÍù5KÍ?¥]W“EÈ… †ÇóçÏÿÅ*hï`jùà@1‘_Šì¦Á–AÛ’çZüV/ý¼.C´uI›½cÀðw4íV¹•ùHñámzm&#Ö|7Á¨Øš4›˜à—R'¾ ¾±I“&]ðm„ãÁzLûöí¦Íï´ `²íÖ,wÆ }_ý¼†Ã£à[·À8‚Ý¡È k,Чª„€ˆCd¤ŒÃƒ"•„€B@! „€B 7,6CW†¸:Vƒ‘ì#ŒqçuíÚµ’ß@xjîyK´™M<Í>cµ!{³ïä’N:™GáêNA~#Ë›1Öu3fŒã²víÚUÕOwŒy³é¿cëÖ­S€¡¯?ÉŠyóæmµr4ö¦ÏxrVF‡jäûÐ.àÍJF8}Œ—eÚ#3±jÕªcÁëw Š=!WAn/Î Ùø°M3ÖÒödd2vkó!m»£[Ša„QÐ<3+µÍS„ï<û(XAûãÑka8½ ‰ã_Ðç‹< ˆ „@©D@FÊRyؤ´B@! „€B ü!€Aj9F­¿ÚÈñüdé† ~À@ø)uŸY9RÀ{Òxîf9ó§Ð>ǘv/í®bßǽõ¾¤î~â×Ô-Ǹf—î—÷!F»t ’GûË>[úL~(û=~ÿȹœ²íyuHIIyvIì˸ cé4Ü––ö`òècm؇rÉh–{/Å@9Ùç— {ØåÖÖŽeÓ÷Àwm>¥í·¶}9ÑÏ>ü³Z:ú-'?–qNz pZÌyÄë0~®ð7È£wapäøØ¹>ÒWõB@! „€B@! „€å 3VŒcHí•í ¿'¤—1ß·oß$¼(k‡bB^²É ®ëÒ¥K.OJ·ÞøÃÉry”âÙYü)Äç­§ñXzUñòG“·%Þ¡°4<À¬b42à]E<95 çà6áô¦M¾p4ùœ ?™nÁ}¨,„€B@! „€B@! "!P(#%žs ¦>b¿ÈHûOFê_uÅŒ€k¤,æn|ôs'çÁÀâîGò…€(9´Ü»ä°VOB@! „€B@!PX:œÃÒä¿c¬t÷,„45-XŽÿÏÊ•+ÛGŽŠ5ÐÏ–ÔÔÔWе B@! „€B@! „€(“Ê“²L"¢A ! „€ƒ€<)u"! „€B@! „€B@!Sd¤Œ)üê\! „€B@! „€B@)u! „€B@! „€B@!Sd¤Œ)üê\! „€B@! „€B@)u! „€B@! „€B@!Sd¤Œ)üê\! „€B@! „€B@)u! „€B@! „€B@!Sd¤Œ)üê\! „€B@! „€B@ ‚@!Ï´lÙ²Cvvöˆ¥K—ž|Ê)§ C×=äï §3ü§íÛ·/gÙ²e†ã‰zûöíÞ½{÷¿Ñ§mBBÂÖ¤¤¤‹/^/úI! „@¬Ð= ÖG@ý ! „€B ä'eÉa­ž„€($•*U‘““ó\$1(oÀà× O¼Ôedd¼€.+ªW¯žš˜˜x×Þ½{'uêÔ)%^ô“B@xB@÷€x:ÒE! „€E€<)‹SIB 4oÞ¼"$ÖÀ‹rœ+£ÞEóöRÑ¢E‹þ,‡«Qž…¡oàŽ;úP>“Øšúœ *ŒÛ³gÏS”{ÀSÙÏwÅœ9svà•9 úÐî#V!>„÷¥ }~ϡԧQœ€ìÐ&™Ñçh©Bg£ËÀ%K–l¶6n€§ínpËžô9<@—xÊ–=‡ØÙ6¦)Œ{=cè@þ¢‚B \" {€îåòÄ× …€B@Ÿ<)u!W´nÝÚ €/ÄhÆÊ.®‚Ðêb<ļ 1¾@}ŸŠ+6¥þ ;w^›œœüù ?\µjÕ±YYY7Â$´S0X¶'=#à…¤>èM‘w ¼=)^G|šãƒZµju(Þ˜ã¨…×Ή¤iÛ·oH]ÚL†8²Ž…|w’æ èµ¾oƒ#m¶{CMx*aÝäÒék=±®[V*„€(oè {@y;ç5^! „€BàOäIù'Ê r‰@Í^jn›Ø{[¼ Ã_3ða¼k:a| Ã]¯~•+WÎÁؘ„A°FÊŸˆ½Î:ë¬ÌAƒeßEûíæùئM›qð¼Å>¿b|ÌFÎwÔæÊ"ÿÞ_SþšvÛ1rÖÇóÒ ?ùä“—Œ¯m۶ײ ûxÍKóëÔÔÔ·¾fÍ[ž=ƒìíVvzG~¨[—fffÖ¡n§·ùV®æ¥)/„€(OèÛ{@¼Í ÊÓ¹¯± ! „€>ŸŒ”: „@9G Ó—ðaJ¯÷–ULö ýcLϱ†£b3Œ‰K]=ð\\„ñ.—‘rÚ´i™,×¾úP><ó4üÓ¦OŸ~mV¹í,5¯F ‰Ã0@v&5#¥ÅÀ‡iøPÍoþÈK¦|$<‹]ú‚ V“_M½©ožžž¾É­ƒÏ‡!ôð… ®siôÕú]nÙMÇP–†ÏuËô½¾ênÙŸÖ ý5ˆ¦¢B Ü  {@lî5ú¾×4kïÎL_NsN¶“ÊÍ § ! „€q…€–{ÇÕá2B äÈÉñUôåd_™µ'û»Ê½&¼]µçÄãJ^‹?{Ę·–Ò_þ¤øzò,K±gâµØ ‚íᘌäÈ@¥?ƒar$†@D&v†×ö—œGLpùðØÉvóžôwòG¸e¶˜¬Ç•g!g+q6ž—5ÜX­Zµú^¥µÁø¸¾‰ÁgÀi|óæÍÛ - £fÀ³r#âÏV¯ „€(èP²÷»çÛ½ßæ6pæåñÄÓ˜…€B@¸@@ž”qq¤„ˆr|I9>ßEû|¾~•{NœŒŸõÝãz< KJCPça\Äòì,ë¶ÉôîÛ ‡,—þ ßQãåø.FÁ+ü|»0þ9K¦¡Õ‡ö4K·W²l».mN‡6*X^Pyí‡"»²×Pw3ž={IÇA½š±|üG —½Ù«òö–<ÞÿáG Þ’édœ¥â!ºŒEæ,S¿gòäÉgÀš|È!‡|¡‰ª„€eÝJæPù¼‰­|{}wsÏïîËùóå]™>¹48! „€B î'eÜ")(Jœ„_Nœ½9‹RzMœU­Ï{KR €ËxH„¡rFÀé;ÏËŒŽë1î ¡nÆD[¾=ˆ6ÎkÒ)?ýÒÇà{#æ>¢3žòõ.°KIDATòTÊæ}6`˜ü’Êû‰¶OårøO Ç{ò3hw£×§Ð?Ç ó^ŒŒWy ”a…†© ý`ªzb ü‰ôyâ@[ʆ]d! „@™G@÷€â½Ø=Ýîív·{=Ÿ‘ ¬.(ó'—(„€B@Ä=š˜Äý!’‚åÊÝ'7JLØÛ;Ç—¸"11;ׇVм(F±¼«q$Yl½¸0!!iÈ® =¦Dâ+Ê: É)„ùóççú*vp:t8dîܹ½tûú7‰{ÆŒ³cFÊÚ{IzyÃå­êªÐΖBß¾}“V¯^]ÉÍb!3¡ÆPH‘j.„€(ÕèP´‡¯JïIÝr²³ïÁ0Ù:’dî÷«“|¾‘x R—X5Á—Ý4;§Â„Ý“»Û*…òÀ ß^Ô*! „€È…€Œ”¹àPAÄU{L¸i_‚ox ‰2t†Ès`ùù“O>yÐx-Ð~)ôn+·î§°˜%!!Û•ãÒ‚SŒ£iÈzWÚß–M ] ž'’NMNN¾ráÂ…»ƒÛ©,J3•|9·Mìµ-£4Bº ! „€Fà1=ùHŸïo5{M¨©‰naTC! „€B ÄÜH‰²9FÀu®Ò‘¿’·1`G<†Oƒ™0Z.ðÒèã \ÉOñ¤\î–-…–Ârï&–‡¿.†É+  €ö-å{öìéKÕh«Wem{o++cÑ8„€B@‚# 9AÁ±SK! „€B ðÄÜHÉê/èP0$Zûf“…1ðN†øž“i6T ”Ç`||ˆìhöüÃháBZZÚêÖoܸq„}„§S§NÓ™"ã¹píDB@Ä36ÞÑ‹ŸŽDsÏ>P´78ˆ„›ˆÇ:9ý! „@iD@÷€ÒxÔ¤³B@!P"ÄÜHi£döp’‰| æ<*Ÿ8 #ãôŠ+ÚyÄ`_ìNIIéÓa+¶oßþ+rn¡ý>¾33bcU ! Ja¸}Wµ·0ù À\ ¯s’çóÓN¼B@!WèW‡CÊ! „€B xAÖŽP±jРA‰xR֌ȤJ!PʨÖkB§”žr’êkÛ(– Xç—Ã×ÂòŸ-c÷ŸÃ¥ì_(u…@Ìе¿ì\ÿrÊã=Àæ0ž¹LÌÿPR æØ»W! „€yHÈCA¸B f¯ 5·Ï»okã‡úŽ<.×Ö­q¥§”‰Œâ¾…Ó^÷UÙü«o¬U#³‡¬5+Eâç)U|{^íK®hß^(=áÇ/æúV,Ÿg ëÞSz›4ršßÞ×ì„ñ¡´È7åý°7'É÷Ý+|k?›ìËÙ³S÷€|ŸAe®)—¹Qi@B@!Phlé ‚qŒÀ¶‰½·™zGvíî;çÒ»ãXS© żíûåã0Ä@i²í©î)bÇŒ]¾Ì];|=ÿö ‘KM˜:zˆk¤,5:KQ!/˜R÷€x9ù×C÷ö+áðó’ùO-„€B@rƒ@\ìIYnÐÖ@…€(—dîÞá›ôòý¾Sý…Dà8Ú$Λò²oÍŸRšš ! „@q# {@q#,ùB@! „@YA@Fʲr$5! â™ï<éûcËo¾ahXkÜîAN]–ÿgÄ;ìì츷B@ŸO÷B@! „€ˆ¸Xîݼyó{›4iò_êÎ"¿ Õ»óeî/£B|pñUò–ì74 ½ÿZ³9íóSaäqÛƒwbË”8!PnøbÞ$_cFÛ¼ˆF\9#>òç¾>ÿÈwÔÉ‹Hr‰‰9µÄz*½}Žê|_).‚îqq¤DiE@÷€ûj\x†ã™x2Î$M@Æ]¤×Q—@ݳ´Ь<gAú}Ä*ćðf|4ê~a­ˆœW‘Ó™ŸTªTiÀüùó4hPâäÉ“¯†vu‡Â7²{÷î@ÏFŸ†Ðþ Í<1ß$:Kð‘óùoÐáeê|”;‘\Î8.#?ÝïD÷¹VWÁÞæv*~ÔEx愯RM¼#мóù¾Ç=ë{ÏÇ^([ØorÛ²ñuÄ[oîKL²Ëd© JÆ%¯°]wã%èû#1'ö*Hƒ‚" {@ä:塈Œ@<Ý‚uSY! „@±!s#eRRÒµû&''Ÿ¾`Á‚Íà|çNƒ~I3Z¾Úµk×·6lØPúdŒs7gÑæQâÔßîEeô1^ ý;d¼NZËx¨»mv‚dø^ÁH8›üèMis ±'mšA{CéÛÆM¿ðY8Þ)èw<2ÍÌÌ| Ú¹ï¿ÿþ5¤7@¿’údê^2eŠÙ^%oú}K¼†¾ þÿoïþc½¬ê8€ vÃ(œ$ËIq/KÚlÅhÎ ®"s&«¦[Ù¨­pþåõ–­d¢æ?­Y­–Mç\³]ÿ¨õe#™Xx#,8×%œ?" «W¡.×è}¾Ü¯\@ä^.ã>ßïóz¶sÏóã<ÏsÎë|¹|8çûd½,N*ÁÔf2ùrüñäeùuÚðâáÕ3ò³L9ô¿¹g„ÚM:Q vŸ½îÖÆ¾~YãGià7&Ðȧrn¹ÆâËV6æ~há®4©§ú}2©üã¾¹gÀ¸Éœ@àˆ€gÀ‹‘5Ï€ãHì @€ŠÀ¤¿8§»»{ T$£÷æ/q‡ÊzòÛ3J°óæÍ÷eóå(ç&À÷¹¬oïééùÅœ9sv'Hwc¶/O:jIÐïòœ¿5#HÚ–ƒÍÑ¥P€_IöÓÜó‰¤-YÿIö]‘¼¹dýŽÜs{F/þ*;8=¬÷-È}‡§M›öí\㹜w[®÷éåË—OO~Mß•6mʱG²~OÒÊ%K–œ“üÒ”-£6wåüïf»¹Ìœ9ó7Ù^°páÂ÷–)ñÙyeWWWo9˜vݱiÓ¦g›ý @ -.øÈ%ù»¢ñýÔvÏj\œ]ï>§±bÕê \Å© p&<Τ¶{ @€í*0éAÊ7ƒKЮŒ2,A¿Ä÷ $?+ywÒEýýý{JÊ(È'³ÿý‹/ž}Ì5ʈȿŒÚ××ZÏù=Y_ݺFÊÝ’íKZÇøügk=ù«)_FQv'å¾åÔm™Þ=XV|2ÙþÙ9¿gêÔ©*ûG–?fß쌴¼ ÛÏ'pùRÙ_‚›É^(ëëÖ­{-Ùït]‘ú.Íú3eêx9f!@ =J`ñµ·OiÜvŠÕÿeÎ{4éʯÞܘ>ã=§x§ @€ÀdxL†º{ @€í$0µŠ•MòÇÖ+ÅgßúŒ"|côä²eËÞµaÆWG—-Ê¿ØÚ—íg»¹™õ}Ik ¼§ìÈ4òw8pàõæÁü˜È}G®q^ëZ‹-*ÁÓé¹f |îMþÁä•ã Â^˜:íÌÈÈç¨åÊ”ïæ²víÚÿfe]Òsy©P3>Q¤üCY¹¸¬[j#ð¶´TêƒÖ¦CÇrÞš²?;üQ¿³C>‡[ã'cðû¿s~ÿ—¾ô ë'_9 @€Àd”ÌŒå¾å%2EyÂ/c+o÷Î Ê·®•õ«ÜÐÚ.y™&>ÖûµÎ;Ù}[åJ¾téÒY£·[ëeZw™ÒÝÚŸ¨M©û½i×F—µN€@Û LK þ‘©Êpö“¦R.å_J:»í[® àà3PwïÔ@û  @àÍÊÿævÔ’‰ïÌhħӨ»’$]—Q‡×çE6¿m§†&0¹ #&¿–:2Ӿ猪l§&¨+o-piâ­‹uôÙZÔ ЮžíÚsê}:JòæÓq!× @€ÎÈ žÎZò=ûà»8¾åiÙŒ,?“åö6låÞÔyW¦ƒJ€² {O• œ\àá)ÉB€õð ¨_Ÿk1 @€ @€TD Œ¤´ @€ãªòâœã*f @€ @€õ¤¬G?k% @€ @€Ê RV¶kTŒ @€ @€@=)ëÑÏZI€ @€ @ ²‚”•í#@€ @€ PAÊzô³V @€ @€¨¬€ ee»FÅ @€ @€ÔC@²ý¬• @€ @€*+ HYÙ®Q1 @€ @€õ¤¬G?k% @€ @€Ê RV¶kTŒ @€ @€@=)ëÑÏZI€ @€ @ ²‚”•í#@€ @€ PAÊzô³V @€ @€¨¬€ ee»FÅ @€ @€ÔC@²ý¬• @€ @€*+ HYÙ®Q1 @€ @€õ¤¬G?k% @€ @€Ê RV¶kTŒ @€ @€@=)ëÑÏZI€ @€*ì¬B%Ô @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€Àiø?A• h‘ÕÑIEND®B`‚open2c-bioframe-4fe9b25/docs/figs/closest2.png000066400000000000000000001432671477525772300212700ustar00rootroot00000000000000‰PNG  IHDR)Iw´¨ZsRGB®ÎéDeXIfMM*‡i  ) Iv´AP@IDATxì|TUÚ‡'P‚H/ d-€«Ò«Á‚¢ ‚¢à*`±÷O¬ˆ(ö‚‹‚ « +ë."* 6$ „.ذÀ ¡$@à{Þaî82“6ÉÌdþçÇáœ{Ê{ÞóÜÉÜ™ÿœs¯Ë¥ " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "KÚ·oß­mÛ¶ŸÙœI'>lþ´?­M›6=‚µQˆ€ˆ@tÐ5 :Γ¼(¿âËïÔ43(>ÄÄıÙÙÙƒYÈÍͽ!..nf°6ªˆ>ºDß9“Ç" " " " ÑO@"eôŸCÍ X yÝ"V?pàÀ ÇåÀ *ìçxl»ví.;xðàb5Ž?JNN¶sçÎ~ŸIìHýÁøøøûöí{†ãóhSÙÓîÊ´´´¬Èüˆò©”ÝO¬B½råÊñ¤.[¹Ã¸QߔÙؾ>ÙØìNùó”¥ „Î×aË–-Ë´> " " ¡! k@h8ÊŠˆ€ˆ€ˆ€ˆ€„‚@…P‘ ˆF;v4ðeâCˆ€&VötæAY]„Ã:©©©Iˆ…ã©ïW©R¥c¨?b×®]×&$$ü›ü'”?\µjÕ7öîÝ{í¥¬-‚eWÒ“2/!uQ~ ö.§íù^G|–/ÆGtèС«1gP÷*«vN"mš••5ŒºÚô™Eûç°ÕŠö»i7‚TAD@D Dt H™H"2}þz"~³bÅŠ7–/_¾šü+þ³¨\¹òAÄÊ•*V¬x¡ò‚sÏ=÷ñÅ‹ï¡í^údÙÊGÊg (b…ä/”gÒç[ê8öÈ?Á_SÿeYˆœ ÷ïßßüÊ'¥§§oÆÆµŒ‘n‚(å_§¤¤LkܸñfÊîæø¢‚ˆ€ˆ@ˆè"2#" E'0¸è]ÔCD@D H¤Œ…³¬9æKá±bâ §qp‰“wÒ¹sçæ¿‘ñ–={öüÆ–î×ß{ï½ÆN½“b+ ÑñaVA®'5;-MÜtêsò¤;±—@z,m–:å•ëÙÒ½‚º&Ä6[-òEz íŽîÔ©S#§­R’Ð5 düÔ[D@J@ ¥}ÕUD@D HYŽO®¦œ¢äÿhñŸVGûä½Y¶bÀ Èt#& TNðVz2“1Y¡míþ’ ‰qN;„ÆNÞ'ý|sç˜ûPÖç•gag;q+<«;±Zµj Y½¹Ñi«TD@D dt (?õPHj¢²5ø‚º‹¹7äQÜ{2ž|_çM8ÌÉÉɰûD">ÚªÇד<ívÓǦ㢬!É»lÝ^Û¹sg»Ÿåéô`ª4ڵŶ³2óVöt£lñ4ü2aÔ®Ó—{U.3íXAD@D ät (9CYPHJš²U–.]º’/©² r%"à8˜ˆèø+‚áêÒW’>H»G¤‹ôS’§(¿‹ô ÚæIÞi£|5«0ïCʽ/íiã " " !  k@ Ê„ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@è &téÒ%¹ ‹Ýºu«ã߯žþÝ¿÷½'ã°UÛ¿MAÇ6>ñÿvf—U”µüËu," ":º„Ž¥,‰€ˆ@! Œ,d;5R! ‘²T°Ê¨ˆ€D?m÷Žþs¨ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@THÕ§O΋€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@ôHýçP3¨& ‘2ªOŸœè' ‘2úÏ¡fPºBl>ÔöBìžÌ‰€ˆ€øõ{v¨íù¸ª¬ˆ€ˆ€ˆ€ˆ€D7‰”Ñ}þä}éè€éEÄQ!Âì™]³¯ " "™t ˆÌó"¯D@D@D@D@Ê1‰”åøäjjÅ"И^Óˆ‹‰M‰kˆ¡ ß`Ììš}ÇÆSˆ ¥} °kŠ®‘q®å…ˆ€ˆ€ˆ€ˆ€ˆ€D$d¼CÜCÜE|ˆX•XÁìš}ÇÆ³qm|ðÐ5 <Ü5ªˆ@l›ÓÖ¬E@D@D@D 8ŠT#þJ<@œB<ŠXÁƱñl\ßü0D@D@ʆ€®eÃY£ˆ€ˆ€/‰”¾4”ô$~I Øg‚HðG>”{)Ëý)ÖE@D x*¯›z‰@¹%°™]JìDÌ ž@ e8cf×ìÛ86^XÃÁƒ+¯:pàÀ·|9™öÒK/µ«C\D@ÂG æ®áC­‘#€]óíÚoŸì³€}&ˆ¿äƒˆ€ˆ€ˆ@lÐÓ½có¼kÖXJ“.Ä„‚›©…ýrlO¸À»7ÛÀ¸¸¸|a™Åñ˜k®¹Æ8(ˆ€ˆ@¬ˆ¹k@¬àXŸ/âd®÷÷À¡×û¸Xç¡ù‹€ˆ€ˆ€D‰”‘qäEäµ j{!'çù²r†ÏãKÌ<ÒG+ç‡| È'ê÷ìPÛ‹|‚ò0¢p]ïC÷OçzQ¾ÉÐ/§z ˆ@„˜2eJã½{÷öÅÍùBaÛ iÀæ«Ä&]ÌŠ‹1Æ ›]@;U‹€ˆ€ˆ€DvHôÆ¥{¹Þw æ×úõÄ!ÁÚ§›öÐÀc*Uª4sРAa¿ÕMqæ >!%`;‹F…Ô¢Œ‰€ˆ€” ZIY.N£&Qž ˜@™››û\˜ç؉/6³ø’3¥FW^|ñŹaöGË€ˆ€ˆ€@à¿ÿýoÅ;vüƒkø šº«íGKb©ížà33¶0¾¨ˆ€ˆ€ˆ@ìH{ç\3Ž>?šË+V¼…/Ÿ‡Ú}l¸’’K÷­¤ 5}ÙÒ#àùQq0?2Ng”p®¤ü«çW÷gšÒ›±,‹€ˆ€ˆ€D3‰”Ñ|öä{L@Dtoñ6rèСi¡ž4÷§ ¶…|^… Æ0îÇ¡WöD@D@D@ʆ€çGÆÙ“&M:'yÛsNÏodûÌAÛ´üêJRƸîîÎgš’ØR_òK@"eù=·š™‹«&ùqÐî=iÌÑÓ½‹EQD@D@D òx~tüØžîw÷rÍïÍ5_÷¨¼S%D@D@D & H¤ŒÉÓ®I‹Àáø¢b÷™œÎ—•1ˆ“_ÞB%" " " å€çGÈó+[sý·••ý¹þW,sÓD@D@D@¢—€DÊè=wò\BB€/'vûÉlë~ìꫯֽ¢BBUFD@D@D ò x~”øòË/ßÏ6ðxÜ&ò½–‡" " " å•@Ĉ”mÚ´9båÊ•¿´mS騱còÒ¥Kÿ(NõX&ÐãŠ+®ØË 4wˆež)¯~å•WjÄ2Í]D@D@D ¼Â*Rš¸Ø®]»@p)ùjmÛ¶Í!Õ¬Y³;7mÚ”˜¯èÈʯOW¬XqjçÎëîÝ»÷Elt¥_.Bçê^¤nªaåøM’¾–÷ ñññG#hþÏ)£;úO¥ßqNY4¤Ìï9üÌDÜM~sïÁ¾‹ßåcä@9çBžˆ€ˆ€ˆ@8 è3A8ékl áD€6hú;­R¥J=ڱݴǭ222_´hQbe¼EÄ·®”oqŽ{÷îÝ£C‡õrrrR÷Ebbb ë_±bÅÇb·»3/êïrú9©¯@é´S*" " " " " " " " "a[IÙ¥K—dDÆÁ•+Wn¸`Á‚-6ýeË–e²"ð2²'ÙñôéÓíA.ÉÜýû÷{)w!DžCÕÏË—/ÈÚX ÿ Ê{#Vn?Târ!Rpì8eù¥ˆ›ñ¬ä|žô2úü„`ú7ì}om)D¹Ý§§1ñ;ì_ccáW ü²U›­¬œš×#€.!ï ýû÷¯ˆè:‘þR¸Û/°ÚñIæÙšãÛ9ÞI:€¸œ1¯ã~@¯oN|šv¶R2àøV—_0‘;ÏS—‚ýyØæa{e ”]ƒ?o"ìÞœ_ÿ(+ë‚¿§ÁçOi»°íÕTD@D r è¹çFž‰€ˆ€ˆ€ˆ€ˆ@‘„M¤D lƒP¶Ñ(¯Î~!o1h@„kKƒÏü!Z¦û–1F[D»!N‚Ýg‰_8Ç>© ƒ™¬êlÍòÇsssã¸bbsl¼H¿Œ™ÀguSw6éÒ9µjÕ:}Û¶mÃ8ÏñÉDoX·n‰“ÇV©R¥Åž={êakq§Nf"n&aïrêîÇf{ò3é¿ÔÊ29~¿W¯^ã7oÞ|T ñ½ƒødð·6ígáïÍİù(ÑÖ;§.éâ5Œ³‘4ÚCxؤ±yÛ¶~‡D@D@¢—€®Ñ{î么€ˆ€ˆ€ˆ€F œÛ½ëãM±”c³@p«OÜqØŒ/0ðJ'"عWiÞ̵‹•‹£/^¼qÏV3cm’““39îŠø¹sc®¤¸Õ!ä¸effæÑlAËH:[¹o`\kVò¤jÕª}‹ YŸ1ÜOP¦ocŽÁôZòÑËÞ·UšôÁlfë`ãûŽãäñµù¯SRR¦5nÜx3bäÝÛªSwÀî,Æ|ƒ1;eQœÞ‰ïMfñßÖBÄM´Ƀ‡²ú_D@D Š èÅ'O®‹€ˆ€ˆ€ˆ€ˆ€?°‰”ˆgkpÆV/æ ˆhö0£óæs€¨·†¶n!Ñ·šUŠ5SSS«9e´{‘ՙ݈@7Å©óK79ÇØÝF¾²§¥¥í@h<‹Š«÷íÛ÷?ê®ÀfE«ã^˜wr\‡ì׳fÍúŒÕ‘½¬Ü7pÌ7io:ÚYYY›¶oß~?þÅ[úú޹‹¢o¬Ü}rˆñÁÆ?Ô2ïÿØlBlÃó­e×`çh¸˜8çBÄü9o¨=²ùÜuÿÙ H ÛÓf‘`ÛÜm‹¾‚ˆ€ˆ@tÐ5 :Ï›¼€Â&R²Êï[¼²û@švä ”}à~Õ½…ùdâ>§¸ [¢}«ÙªýüÎ;m p‘BÞü: N^JùPDÕkY Y‘ocÇY[¶¬ÛÃ|z²Â²1åoâ÷ô®]»ék§eË–kÖ¬yŸ§ï´¹ ÿ[ÆÜïۖヾǖ6¾[;ÆÆvâ<ÄØêNd솶BÔêñÝ}ŸOËGyxœ_ut'1’ö5yÝ‘¼XÄ®aoþÔSOÍÇ {(ŠA´¿Âþ÷$¢ž@¬]¢ýo^þÇøuËóÆå¤Qÿ¤ ˆ€ˆ€ˆ€” ÷оR±\€Qf³Òî•8µ}ûög³ý8²%"žéNS¸oäÁL4mÚtæÚµkoÚ²eËXÂs'[­÷ìÞ½ÛÎKâÎ Ö·(uˆ ±ù…³=Ñp ýmážóa«4ÿÉêHGGÐÖ©s7`…å•d. MoÒÿÐßÌ“GXu7 ð_ãÖ‹¹Ï#>lõá°íË ÎGðïDü;¬}”tÄïKoâ?{’QQ¥ë!â .W7’AÄ@+k©ŠŒÀ™V?öØc®øê\½.·Ýü "~ø|ëÇ/F§óò:’ÄÔ5À̉]]-þj—.ˆ> ñ\¯¿õëçŸËˆžè;òXD@D@¢@ØDJƒÃJ¿ç*°%ùCÒªˆk»ðÞ@p|° xöÄnÄɬfŸý#ÑV…~ƒ¨7»Ô¿õÿ§Kðo)þÅ“‡ô<¶OWÆï{%'Rw3 Ý§òáôôôÍ~¶ÿIŸóhc+Gãè›QµjÕi»víjá×.ÐaÀñY5zXæ¾ !ô¶žFú>æ2þP¶ïLJÃÚGa­b ì¸[‹é¼=>Þ”Ée.ד$ï soSš…'\qÅnÿL ø`D¸êÄR›Ì¿sÎ9g;c¶-ܶx³Ú-‹ñólßöu—•ŒI<<§RA+D}ûøæƒïÛÎÉ÷ïß¿âúõëk—©c'S[ýøÏ‰üwI œû’¾Ý‰œLÛö}} L•U׃½.¿[_PËŠ¶Æ)öuîÔGÍvÄ\{Je¢2Zšt (Mº²-¥H@×€R„}¦Gâò¨ès[‹€ˆ€”6°®¤ô\IÄ4pXj¥ùiþ}]öæ.\¸Ý{ ƒ€™M•Åb…`ãçgÐVšR^,Ñ7?{RfDzÌÖƒ^\B‡ZÓq‚Ë5œäÄ•DÈ% k@äžy&" " " " %&1"e‰g"¥Mà8©´)ÀþÕÔ7xœÿB± ë^ìÌä翹\ÿ"{-Ñnì¯ "PúN-ý!ÊÅ«™Åï2]"äDÈ (t (ÜIŒ¤k@ᧃ§_ÛNâ}ŸâˆÈòàœn”òzt˜Ð§OŸGì)ä]ºtiÈ8·Rwu›©»ÿçãû_aq åu)k^³fÍ6™™™g’gá «:¾Î u_?ƒñ ncŒ ScâwÌáš„„„MôŠãêÔO…÷åðéŽýç)KaüyÌc˜=Mœòv”OÀ¿PÝ’!J`á­g]® “©]Ls·Ó½ä®bšP7²' k@Ù3׈" " " " "P&Â&R"Ê5E”›ˆ(v-3ý1쟤5mÖÔ]Џ6QÍvõ&Ðn2zÙ<òË(?†>—ϧO Ê^G(œ† YcïÞ½³©¿üm999Orl6{QV—8ñí\ú$RöéÇ”K¾?ùIcÓÚí#ï"o+ìrõNÞ¿ÿEø0ŽãnVçD¾´¿ »—a#ËlvîÜùã9sæ˜Ý(¿ŠúÊÿ1{öl[øüz Û?SÞúÞÔ½ÃÜZPV™xm§nÒüQ‡ã—9Nú#e&Ì:¾yý¤<_´­MÝ‹Œa«&3°ñ8sxøþ¢ìBêo€µ›E»›‰ÑæQ¢ ›w u^q”²H we¹\½u¹âŸ.†Gÿ¡ÏÂCýlž™Å0–.?|¾Àõî”1a[ƒŠ@(ØkXAB@@×€@” (kº”5q'" " ÑG l"%"Ù9gŸ³’ï ÆXf«!ïµ<ÂØ’—š4iò…¯]»ve½É.³còOÐïk²_Ó/ !±!‚äY”¯aÕŸ {&tÞ‡Øö]·nÝêìÙ³ÇDÇwXå˜nuˆ‹&N¥í·´{‡vWZ¹°™€­>ñññ'-^¼x#+ ÿŽÈ˜‘ššŸ––¶ßiG›~Ø}ÍVaZbãï£üo¾ì”cïUޱŠò=V1¦"6ÆÿŸ){‘ºkHû?£_å÷cã ¶luæ7øèðy…òËhwX Ýa<’’’~ÙµkWW漺S§N•ZWÒ®­­ædþh|®½ØþÝ3Î×)))ÓÌð† î¦íûdï\²dÉ:ÒHTžǯ ¯ 'cJuaƒÝTí¾C—’¸_+…íîv?~±ÐeQAD@bœ€®1þÐôE@D@D@D@Ê'pÞ“ÒV®ðÁj¢‘; ¦¥y(##c«EÚ=Ìqw%ÿ±Âï7'Oº“ö&*ÚVe·iu„ßsœ‰(ØÈŽ©ßd©'ì¦îË#PæÏ#ÖrÜŒ˜HçncÂâá;¾¥Çα´óúm"è¢E‹6™/œ^_h»ˆ²F©æãÏ´3Ò8N·:; ¿‘h÷ܲ­é¶ºÒËas‰•çòã¯;°q"èê}ûöý1®À^Eÿþ”7!¶qXÃc íŽFØtûäß>‚ŽGåº\Øžÿ¢„GhÌ{ºº®%ºY¥ÛÆ1¶¢”—×@ÿ”4t9! k€ÞËËûa,Σœ¼ i" " " ¡&6‘Ò8ıÖ΄8nå“߆(w=Â`u‹uÉÉÉg9õiœ¼Oš‰½cc¶]Û–èšlý^oeØó®€tÚJývÐ7¹cÇŽvHw`õáE={ö¬ê{Òßi×Ü)ëСCGÚ™™øø§œ±g~ë íˆ XQ™ìÔ‘ZÛGly}¤Ïÿ¨óÚ ´OŸ<Ùüx N^J£¡ÌåÚjÕªÕÃÞ(ìÛá<±·ç9¬-¥}C[Aš§aälÅ¥1sù¯°k 톢“ÍÞj¾êPVÿ‹€ˆ€D!]¢ð¤ÉeF l"%Û‘?@4ëÌvãvjöü“A>ŽÚÃq;¢à–-[^Ù¹sç(ŸúòˆpóÛº#,¦X%÷~¼ŒäÇ… n·ã¢„¥K—ÚJÍo/´~øw þŒFøÜãgg>å}Øžd[Á _Å»·ä<Ê/¶mÖ”W#oÛ¹—"´Ú½%ÿÇêο™DMÛ©Üž²åvì˜ÏBÊ;Óæ(³M¾¯o}Ayú7¤Í¶åÜV€âÛ@Ž<ýv“ºW욯§y|±mò}³²²–Ù˜&¦RÞÆÓ'“±8µ¡7ÿÕ*D<•6¨Ûvn‹º“. " " F@×€;!rGD@D@D@D@JB Ï6ç’*jß laÕá„À7èkÛn?FÜkfvXýgy™ºmÛ¶ ´ù-ƒbÛ©0ØVkÚ>ÆÖæ¯ÁV6ýÎ Ø¡àŠ+ðÍÊs£ÙBô»Å¶}ûvCh} ÁñߨŒe+ß°{@víÚu=åÓØÞ½Ž˜KyZÓ¦Mš>}ú~ì]Ž×HocŽÕ©»™>«;úÚF(]‰~û ÝKÑж§¯ô­/Dþ_ô¹&Kñ-žü;ÆÃ„SÒϱ{"u鬜ìŒ/÷püéOødþ5a“ñOÁlÆò]ùYˆ¡Ë¬I6# áÅs†w jÁCL“ß n¦" " N@×€?ArOD@D@D@D@¢‚+öš"‚î8KþbD³4çØR[…謦ô-–GhKÀ¶-¬ IÀž­ò hsDÿþý+ù7Bx¬n¢ ¹{¶£¶ýÚ¿­ÍÇo{¸“ ÇÆqõ°³VæëþW %· N©RD@D@D@D@D V ŒŒÕ‰kÞ" " Á (’ï^üZÄ·*¬Øû /mõpV+ÞÄöd[¹§ " " " "PÎØ»+W®,ÖŽv‚Äq[Ÿdv›üQΰh:"kL¤ z+¯X¢ùŠ€ˆ€"6‘Ò†gõd}>pö$kÛžç³íùëCnéò@ÀÄE>ó=À\.%_Ï|9¤³š5kvç¦M›¹EN¾¢#í>å¶4§ÚînŸc½ëJ¿\Ò Ô½HÝTãƒðù&I_Ëû†øøø£4íA„î`÷Ùæ®6Óèç}ТSW©}îeœ~|Þµ¹(ˆ@,HËg_s ÂvOJó‰i¿’L ⟪D@D@D@D@¢˜âÜ$ÜoQ©R¥žéééëíö2ˆ…ÿÍÈÈxÁðVn9ãþ<ÊqGDÈ™ˆ— lº-[¶<È}Êëñ0Äì¶ùý¯X´hQýÛÒÿì®ç³ä§ÖÑò.îÿý´åÀ½ÀMÐôî¿ýMBBÂÞ‚2Î0·Ä^ +‘²ŒÙk8è V‘2:ÉKâЖ¾âPS(_ì¾ÚˆŒƒ+W®ÜКh³ãÖ>™\#.#{’;b"+s½Ç”Û®›shò3bäCÖÖýWPÞsû¡·HyÀ±ã”ù§M±ÿ彫y[‰ÙŠø«.¯gÕåß>øx âçH„Ôó­Ü#ŽÞËvõ¾Ôµ¦înDǪz“_ćÚó³ý ¬µ±«sö©øòBë-ô«KYóš5k¶Ù¾}{Xø<Ç)”Ï£Í0ce÷çÁÏ0–=ÒîuþQrrò•<äp'¶>âøßÔÝGŸú؃/âørŽ?JLL¼Æ„]Ú(ˆ@ÌèÕ«WâܹsíoµÈ¿¥¸³Î:«Ê|°«ÈÕ!ªØëdóæÍxßUŽËY(g$R–³ªéˆ@8 Ø9¾8z·ôñå©X[ú°áÞÒÇ—@mé ç ÕØ" "PB”m¸6ltJÇ_!o1h@pkKƒÏü!Z¦û–1F[®Cœ2ĺÏ¿pŽ-¥, a°™åIÇÌ©U«ÖéÛ¶mÆñxŽO¶:' òUÆnS瘴2e)vl¶ðm Ç&OÑc»wïžHÚ7?Û|ùm3gΜQô¹ö7Ðïx¢ µs<)33ÓlÏÂîÍİñ(qõw²Õý&RÛ¢Þ±óHÄÕ·vîÜy Ç“é{ ý²B´å7ÓÇD˱Ø0î¯#nžÁñL¢‚”;|N´Žãý¤F°É!<­æ3é+üàðD°vþuô¹“xc»ø‘bL4>;ÁæÀ¼n#>Ìü_ðŸc8Ží®ÄÆæ½ü Þ¿þúgñyn v¾å´ç4Åô-+lž‡õ&ñžú^'°q€ãîü”]Øþ¡jǹzžy ‡s™÷¢PÙ•ˆ6¢Íaù+"¹øPa[úN³-}|`lÄ—¤v·²-}¶’ƒ-|ñ¹øv¥|‹sÜ»wï¬<±-} ©û‚•-¬?«dnäb=»ÝYS—ÓÏI}ï9fíø¢ö _亥/¢¶¥OAD@b€Ý‡±XÊ1p¼ç×'î(Äö¼ï^éDÄ:÷*Í@ý¸¶Ø7Ú–ˆƒGs ‹È×9PÛ@åôÏå:5ŠëÕV®wOpÜ›­ë•ò³m_È)·{iïæÁqbëý¿Eÿ~Ô}’’2­qãÆ›±{7ǶŠÔÅ5u×´A´3Q7“q¾¥¯{K¼ÕÓ÷¹%K–¬£ìuê*Ñö1ìþLU<:Z(ø›èÈk~AsãïérþŽ^-¨o}×®]äøFV-·A0ê¥Íߟ$™lùHq­fùBý­¼—Ùçÿ« +Pš-ú­öœ³@¦–#P^Ìx¿ñzj˘íÃ!PšsŒ}¯çO:ª ˆZI#'ZÓÒ& -}‡¶ òåP[úJûÅ&û" QCq` ?5÷w˜/„q¬L:Ê#¦ùW{ù¶¡ío'Ãèšü µ×¶<[íìA:¶ºP¾wòÃØ?hüõ¬Y³¾Dè³íäöž€Á|ö­äøk~$ûÃÊ0¾çKòž 64)¬m|ÞHt¯üÁVb~ÔÛêŒA‹y6bþY0|œUc¶ZòåW:í¨ßèÉïÆÆFÇ'ÚØnÛ® å–¯ñŠüíÙýh힯ö75÷‚)6aÊÇQf÷°M&µÉó¬Ü«åjdee#Ûž˜E¿Oš6m:‚ÛFì¥ß={öì@™µYÈßž‹÷²kø;ÿœº°e« íööãúÙ×CÌìÌûÑ~X7Áë&¢ý(¿ŸÏ…CùáÊo¦,…xåóI+v'>Äûà«v[VM?†ÍSˆµ)ÿœ6W"œíæ8hÀ¿Á´·6ˆÐo.ýî Ú‰J|jG[cP…h+í>ÁoºzöìY•Uæ/“mFûQg;Bïp»¯pA¾â±6Ÿì=Èæù$vgP~?å“wß^ƒºÔÙŠoWÇŽSXý}5,ÿ Ë<â³ùÃJ&¸Úí7Œý~ÎɽØÏâ=ðŽåœ}ˆ]w?ìÞ„Ýe”ÛÃÕòá|~„ã̞ǧ­°ëmýÚÙBˆQD[)±!q>þV¤Ÿýèdçù°-æ,à8÷üg±{)v3í–#ÌõyúØu£q1s4Ö% ̧Ûà“ÍåkìžgF©;޲§ñ1™Ã†ämuë ÌaǶÂÿ ê®'m@­V¾¼]»¾žƒ½¶¬¯‚h%¥^" !!lK¬·jpÑm‹#Ÿù;÷tûpç”s!toéãsÕ‹\ÀOt꜔/›Iä›Ù1L-}õ¸xþ‹cû@‘'PtKcÚ–¾mt²-}[=[úòµ}æ™gþÊøöÁ%~¶¥Ï¶ðÙ‡ÙU°-}¤¶¥ï9>¸¶¢|7> uÙ–>êœ-}]):ɳ¥ÏE¹}Iwoé#KûPe÷kÃqÏ–>² " "9Xø-ÞÄó…Æ„oàý»ïû?ð^Ý[˜O†÷¹Ï)îb÷ ó­æýòyÞ_ó-+Jžk–­æïÉ—îÆ¼¾‰/ÓýWáPnb }tòµðÇW¨llÛ­’/d¨«ÊÊ…±m}hïýŽííÄy\/«;±Zµj /^¼›¨Ã =ø"Û”® ‰^?|í˜]ˆ1U™ïÏüݘ¸wwwîܹ®1 ìþflµ¥ ~ÖÎvíÚu5[ëÖ­ÛºOŸ>¶ó§Áºuën·ôÃg4ûìö™õ·h¥§nœ“7»ßÒ¶érÞ:Y=ï% ;Oó´Ç߯û3嵨nÀXÍñå\þžçÒo(åçY?ÞÓî§,“~ÝhÓ’¢-ßluÁï­]¨ƒ­øÒ<))é4Ž{ëãÔáÇ8Ƹ›~­ùqå|ŽŸ2QÊêù¼jbà~ê:Ø\Ì—FÙjî ¾ÚÖi|y¡± };ãÏ™¼Ï®°~Øà6„ìr³i‘6n’2Û Õ—äuÒêðç’Úœ—SèwþLä³ðIö=Áì0æFî |¦]·@YŸ¾¯Ÿôô *Pš/´{‹äCâp¸]ÄkÈÎ×VÎ¥{;}AçOÙXŒm¯;ˆ;_\#›Ác«üo1’6ö½ã^’Çè×…yÛ5u¢•—$p nÁÜß…çkøÔ×î_xt3›ì ¨HÝtêî¡®;çòdên†é±ø0œü Ä¿p-mŸ'ÓeBê_¬o0Á^[ÖWA$Rê5 "*õ1ô{qq¬OÔ–>mé+îKHýD@"€­Jâ½Ý¾¤OåË‹ l¶z§%_lF“â¬ú³òü_˜ì~Š¿nÙ²e¬­Øç pØm1š±B|)ïAí=ö‚úÊûÙØÇÖNÞË&Óo¤§Ÿ­–´­Ê8W¡Ï^§­_/2üû}áÂ…ÛcKék~å Åå“ÇHàïm„ñš4³¢,äc?DÁr>mªóÚ°’ñøíÿÙG]"å)Ô{sž†0Û™ºåÔ à‡¶e¶ÚÑÛ x[Éù“ÓÛöÈý=ˆ|%øå'ù¼.‡0ö§N{®É¾çËæãœƒ€ xm9¦•Æ0‰”1|ò5u%méË» 1æ"¯-}¡|±É–ˆ@ÔàKë]|19†/:­È7·c¾ØÛJo`…ÌÚø¯(q¯ð¡ýùllÀ—f{°Zw}¼ætä¸ÇO9ÇRì¯ÄαVÏê!²+NA=mÕG““_?ÊóÞ¬N:%;cäÓnÇ'"¶v ®•g%I@ÛVÏCzê"fžî™«{5Šc[ϰm®_ÄO'oëXdu¤3ˆ¶ï"Ò®Ô #^bu¤)Ä/=ù/íØò`òío;t¤ÿE ü°¶ù;9ì£BÌv>¢ÿk‡°WáÅVV¦ÙqqƒÝ–‚ñÿÊûÅüíÙ*ËÝ:+èÒh’¯¯&šác[Þã~ ßÞÏ®²¶Dwàx=ã´snõa)>Ùmš,ØC-eûÿCÏìádVÃ9UðÑ÷ý8ñï §—³žãÂðqº5uŸü7Ñõjâ3ì\ò:;™&«x}¼Ô´iÓ÷ÈW…mžóLÙG”…÷ŠIŽÝÁ¸6hÐàú΀í ãÖ¯__ãPí¡ÿ9÷©°ií[,Ϲ°Ïz9\aj«pm>.®GßQŸK}M{MZàøª1Öšå‚1öÚrŒÑæhæqs¬4¶H¤Œ­ó­ÙŠ@©àWlméûs» ]¼«æ›‹»¶ôåFe" 1AÀ¹·Vq&k+„XY¸£8}õ±•8ùÝÿÌ·=_·í|¾e¾yÄÖm¾ÇN>?Û6qÖio©­Ë_øâGž•œ¾ý”&ðbÆâǬf›‡¸sÙã`3ò•|ö:›Ãg-oÛd­Žnãïê|Ú|ÂN›ŸÈ×£¯ûÇ ÚÝÏŠ¿×éG¶ÍJ‹Ž Fz³Ó¾†OÝ©fÓó>ñâæÍ›?Ãî|ÚØêÌTò×[}°ÀØ÷Ñ6apv?æ¾}‹´ì^èÞÀñÃu·z È X}H?Û¾šql\Û.}ƒï}|±ý6õ—S—†}{¸L‚½¯ÑîJ˜Í¦üCV”›@8Ö~Ì1û´oÍñBêæÒþ¿Œý—ÚµkO³º`¾nÚ´©>ë%Öühl²~ìý »càû¶ß¥þ=V«»w\Ùx4¹€öþ¢¯Ô×dõàÏØ]AþK|êè6Êøt?ÉÔ}ŒÝe¬¼?×ê âC{[hBê]äWÒ·(+ô¢ýØeàO=~ðacãƒølB¦ pK˜Ë\òöàœ‡xhPžsø3vzÁgc°ýD´_(í „‹ðáBÆyŒã”Ç“·ÙGÐ÷ú¬#߇ü—äíÒYäSHí×îh[fWAD@D ” ð>lOß=•÷Ý¥<”Ì‹@y$0’IÙç þXÄ}³ŠjUp¶m??Vì,jß@íme b`.ŸÓ¼Ûµõ/·{ï"°U£ož­ØÖŽU•¹Ñ¾ü~X±Õ ˆ¤ ù̹¾öù;O°¾¬­C݆<ð9²~JJÊû‘Ä¿Î>›¶š`•O]@_9'G°5¹‚ÿ–ldž­ äóy>Óÿê”YJ¿yoÅ{«[˜ó­³¼Íƒ~µØÁõ‹¿¿ö:à{ƒÍe“]A|üÇ)èf£ió ¾Ì&µ'‚Æ<ع´ºâ¼^mÅ#BpmÏ=Ds“ïÇÚw üé{Xeãóþûï×`>¼„öKÿ†¾Íí5Û݈ض’²Ð¡_[æ?|Âkè¼@¯¡B;¡†QG@"eÔ29,ÑA¯–ÿ¯{…õÜ.L|«N ÙŠ{j+âbV~ì¿ì7<Ïö]1ÃEÙDÊ©|X:ŽF5ó[1“ŸmÏÅ>ÑWœuÆ±Ô¶ÃØ FŒÇŒZ|8ØêÛ^y('B*R–&šì³6«;g’ÝÊý÷;«bË)k‚§ù‹P÷…­65‘Ao#Ÿ×'ø· ç1ßeFñ}g>þ¯°~ÐçQæµ–ùØ÷®Kɇxì^ZX¡nçY¸‘ _÷úPÛ—½È& ‘2²Ï¼3_‘2Ì®hx($R–‡³XJs°ìYìp:bÙzĶJi˜ fÿ/ˆvçû7b•çR¼Om7þíbgÕ7þm¢íسÃíTæ–dócÅû¤£mòWD@D@b‚¿.Ö¶_óbb²š¤ˆ€ˆ€ˆ€”>)D@D@D@D@D@D@D@D@D@D l$R† ½È&`¦P2'àû4ò2\Š€DøˆòFΈ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ä Í›7¯æöJ¯ð Ê'bfÒ%œ(¼îÄÄmćáöB Í•¸;þLà~¢s?Ë]>ÆÎ÷U>LJeéw2ý^£ßfÚ¦Ö@1G@"eÌrMXD@D@D@D@D@D@"ƒOò¾œ§Roˆ o¢Ã ½'øŽˆ$oy˜Ð,4±(>™ˆÉÃ{äææ>_”~j[~ H¤,¿çV3ˆ$€È6ŽUtm¨’IoÂÉyŽ£<¼²«ë.㸱9õYˆ™W‘Ç“·ï¥ìiâp«£Ý÷•*Uê—žž¾955µFVVÖ8ÊÛ³¨û¤iÓ¦#¦OŸ¾—ñn ¿ÙÜB\HÝÙ×KNN–¶ƒ1£ìiÊ’©oHþYD´W)®µkצ“ô[¹r¥[„m×®]Kì?‰Ýs¬Ÿ’\OL¤<±öžj¾²cÇŽÇïÛ·ï|¨JùS¤—O»°5‡4``Í©KŸš¤IÄo2åEO¼”Ø8®OòTïïÉ»hcça0}s¯©ù:Ãæ¸k×®s­oà\,ÁŸŸ|Ëüóüño—ßq ¬-uÅ:_ù£²È! {RFι'" " " " " " "¿Lpëˆö9‚XUßISö–‰duêÔéK»c©û A¬!+õþC~ñ6=ÝRˆ¿íÝ»w(© !íj’­uëÖmݧOŸvä¬[·îv«ÃÎ8¬ù-Ç=H—ïܹ³Sÿþý+’ŸÎjÀ{hÓ=))ɶ!ߌˆhc Æ4a›Ÿ`ó:Ç6¯!εcV‡Oô@IDAT¶±1ÎÄ—v´½Áöe«[²dÉ7æ+õ (ïŽÐjs½x‘Õ ˆ®as6;#@¦bc̃>X{oÑïCâðÄÄÄ‹`Ô’üV¸º…X„È$Æz€þ]¬/ ÎDü]acÁ·vRü#ö«Y½ì\¯'," >z¨Ôå äS( æOIÎW ñT´’22΃¼˜'Э[·:»wïn‰@–:wîÜý„´lâ8VþfebïpÜÍòˆh— ±~D[©ø,eÏPåͬ"ÜÛ–"ަïÇÐî(D°çÊÎζê}Ô™÷ ÁÆD,ü;+"—"¸=˜““‡Øw>â_+³µÿþ^$ ”=ocbÇÅx¶j”$î 3Çï™àÙ¥K—Oñ«Àmñ¬ ÍÆÞ Ì½7¡ñK`•ieÒ]°ÙCÙd[ujöY±ù~ ³¼õ£ÏG¬DÊϹ”ã/¬ßàÓnËû|ó=/ki³Äê)?à´ æÓ&¿4˜?%9_ù¥²È! ‘2rÎ…<˜&€@i‚Ú/‹/Þã€@üòîE³°×©CxÛÆq%;&m‚ðø‹SG¿dD¹€ºcühmõêÑÖ½I¤Ž@8‘¾Ž­@i°1Y¹áïSVk^J»\lÌ\´hQ–Ç–ùü-þOô±=qÔ¨Qq;>x«<ý¾ôÈ0žmkïG´mÝf§B¨#öZ¯}öŸÔšÌ×+>"Þ`…g ÊÓé?[³)…`|€²‡zýù?}½¶È¯b¥ë›ÖÊÂÿ.Þã@þà[%Æ+ÖùòW&" xÿÐ#Ò;9%" " " " " " "3ؼ‰É¸å^qh÷CD”:«æ#È ±¶¶Å‘ÑVV¦Ùq°Ð¬Y³ï#á«&B›;pü}¼^þù}oÄö5ˆ}v¿L'Ì'Ó…­×?úŒ¹¿½«†Òß)olu0òn»¶CÆzíÝÓ™ÃW'±mÞWû1Ôú˜x{5Ñ}KÛBݾ}û¶¬žü¾ì Ôu ºs·áã$ÿèÜËÒÚ Aýaœßñ³‰õLJJÆ ž|@ s¾l>¼†2ÏA|SU„ø‹B„ù)wD@D@D@D@D@D@D@Ê ¤ ˆSíˆMÕ: ND°º‡m¾ïS7„iÚ½ +°ý¸>ùµ…™6"àm¬œFÿógÍšÕ»_ RÞa}ÙÂ|3¢å Êj`w¥•QwÂÛ'¶šúøò/úšø·›üN¶k¶¼µ ‚i}X ¸›û°—é¬Ü´r„Àùø1yÏž=HWá—=èÆîiO¼>•‹SÉÛΦ~¾¾‹¯÷Sæ¿Íöô4lw€Q"mºcÓ¶¨gžã(¿‘1×q¼†íÑÓét¾§ëCÔõfuç‰Ô-«V­š‰‘®M›6ÕÃÞ³Ø1‘py{˜=h§D¡ X!º2w~&1/Û~ž̟œ¯õë×ÛÖùטçì=Q¢I¨³ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@¹#0²ÜÍH*5¬ì«…Ї€õ±ka²ÕsDßÕ……íjbf}DÂê…îàiXÜ1éϘG{ÄÁ" Û©S§Êôs¯¦ôíh̸‡¥=¥†Ê/ÄÍغ–§¼³ƒ¾Ð[èC5¼ì“€¶{œº‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€„ž÷i\̽%ëaùd¶ ¯cKrçp”63¶]Û¶çÚþ³Dì«ê_éǰ|› íŠt?CáB¬=@éÒP˜“ rF@Û½ËÙ ÕtD@D T|Ÿð*›²#" " " " " " " " " …& ‘²Ð¨ÔPD@D@D@D@D@D@D ”zõê•J{²%"½$RF﹓ç" " " " " " "Õ6oÞ¼šåü_TO¢”œç/Q¡Ùpþ&ð šm¤?ûÄ“ ÂBÛ“é·†4­ ¶ª zpNlœgÍRD@D@D@D@D@D@"Ž@ÅŠ/ßqŽ…Ù!„»V³gÏ~7Î ³+…ž§X¾|ùÄB5ö4Z±bŪ: ÈÍÍ}¾(ýÔ¶üHY~Ï­f&" " " " " " InOÍn‹@•LzNÎseu]žD}Ç=ˆÍ©ÏB̼Šô8žª}/eO‡[í¾¯T©R¿ôôôÍ©©©5²²²ÆQÞž˜EÝ'M›61}úô½ŒwýÍæâBêÎæ¸^rr²=9|cGÙÓ”%Sßü³ˆh/°Ù‹Ê'h;îÍvíÚu§ÿ ÆÏ½Ô"Ž'^JlHœÏ<ž\¶lÙ÷ä]ŒióLûúU }’1gP~?å“_Bê¢n'ugtìØñø}ûö½ÂqUú ñ±{ÕªU³víÚu®µó Ìq vò-óÏÓ¿­ÿ1}óåcí¨+òùò·¯ãÈ#K‡#›<(.Ä1Õ:zD´ª¾v({ ‘¬B:uúÒîXê~Bkˆøò ˆ·±úòÒâoˆrCI]iW“l­[·në>}ú´#ß`ݺu·[vÆÙxdmÌo9îAº|çÎú÷ï_‘üt¹{hÓ=))édÆ¿áÎÆ°1—vóðÍ„Mþ}J2—ãêØy‹ü‡Ä቉‰áSKò[©s ŸªIŒù"iìtfÌ3[WÐÆEßш™CÈ.7Ÿ-Òæ Ž]K–,ùÆŽwý»#‡ˆY=,îg™´és Ç7[cm„ÛU6öS±1ÆÙRNÞ„ÝéØL~dåÊ•Ï#ÿ>ù®Ø¬Dšâ±QÍìZ`^Âë ‹ˆ* >¦Ó&¿4Ÿâž¯üÆQYdHYçCÞˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@ÌèÖ­[İ–vÏÏ;7Çb¿á,ÑmÜÒ¥KCˆÛMÛw¨kjõä/¡n’õC|;@‘­!!a4ã¬ÌÈÈ8†vG±ªó¶IÙÙÙÏP½±Lä+vÀ—=tžl«<Í'Æ{‰c[áèbõf6ÉG¬üœÃ Ì;öïßß”vë­®°Ÿß³U¢œ&ŽšÏzS~¢ÍcÖ¬Y/‘7qñD«°1§BâUˆŠçQ”À˜•­ÎþÍgÎ;È.[¸pávÒßé[)''ÇXîöÔùž—µô]b‘vK‰îPИN;ÿ4ŸÒ:_þ>è¸ì h»wÙ3׈" " " " " " " ùؽ{·‰f¿,^¼Ø>w@øò.°B³`[©Ý!pǕ쀴 BÛ/‡jÜ[¤“ãêŒñ£µEЫÇ&ˆN"=èé?‘¾ž|°d?}*: ð!ÎÉ{Ò}Î1Û´kÒÖÄ>w@,À=[ žN¿Éˆ‡³)e•”¤m@ßY8ôÿ¢E‹²È}é)K }.α‹¼ ¶¥Û¶¼÷#Út›gVI:B°5q‚ÃÀ}Œ{v:•NŠÞ¹‘_e[Þ:'-˜NoˆþWb¼âž/¯}e"€÷=ò\“G" " " " " " " ±D€-É›˜ïˆ[­lÞvŸID©³ É`>¢ÛkkÛ˜meeš Íš5ûŽ1r¾j"´¹ÇÐÇ+(êý_i{ŒÕ›¯$ý±“èÓÞ-ZRg‚ãÕÄ9Vg[–Û·oß–¡?°"t[§¯¢¸ƒÕYàx=vÛ!bV·cK±a÷‘ ;¸¤‰†Ë<òÈ5Øq„ÓTê_`¼é”}E»$¶Ô¨ !ænÃÔ$ÿèÜ[3¨C` 6&ó´ÕšMÌL*!›È”OaΗñå54ÐsN̤B°?(3HL„#6EÄê€85Áê¶ù¾Oݱ{V`;t}òk ã+þncµâ4úŸÏVçÆØýñëË–ê›-QV»+­ŒºÛÞ>±-ÓÔÄ—Ñ÷wªlùNîß8ØòÖ6PÀæ©û›mðµ6ù)ôý?ì-óôy›½¹÷剌½¬Zµj&Fº6mÚTíåÏÒÍD¹ äí¡5îU”V˜I¿1¬`üt%õ5öìÙ3±2²©4±ùMÿÌã]æaÛ±9ÝGÛiø²‰º¯233íá9V÷=éxü‡½kÇkØ:=ºó­oi„‚ÆdèüÉÀ×ø’„ÿÃð#=ŸÂœ¯õë×Û—^ƒûìÙSÒD@D@D@D@D@D@D@DÀK`¤7§Œ@€•†µšâ°Þ#v- ¹·ÚVϽuñV"ƒ¸XßY½Xˆæî&ø–`ýüÛS6šxõö”î*þõvLù]»v=2¿:+3_ò³¨½SÞ¥K—dl7pŽÔxZs\iAczÎqãüVŠÄÇØ:_ˆŸ÷PYYÌQc„†€³ä74ÖdED@D@D@D@D@D@0‘Ò»Z,p3ÕÄ2Ä¥ ®N`UÝ׬ü³‡×ôgx{ÏÃTÊMçΛ°:ó4ÿAñí ¶j»Wdú×9Çd£ñ£mçvÊ”– @{-O8gç¿û!Je3°F)m÷.>u(k¯»\ͺ\î'2öÞžûúøú1z~…kneÜd'ó—ëSßzåE@D@¢“€®ÑyÞ䵕@bbâbî-Y~'³]x[¤;‡C 4¿ÙZmÛ°mwž€øX5OA>øþ6òÙ•O•ŠJ™Â°=@éÒRIæCI@+)CIS¶D@D@ŠBÀn,~q5qGa;òÈÀº{\®5´¯e}¸]z©Ëõo§ÿL—«7úŽãºùÕ;í ‘Ë¿BØUÞ«pq5qGaèPXRÝN+)#úôÈ9Ÿâ>×4²ˆ€ˆ@9'`_Nç--tèçrmæâu«O‡gM˜t޳]®1ärޝ€é´)dZ,ÿ i[ÍD@D Ö ë=V×€XÙhþ" " 噀DÊò|v57(§Øâ=•”ïÙôØú]••Yžm€í¸\×XžúÜÓä:Ë+ˆ€ˆ€”º”Ÿs©™ˆ€°£ˆ„ˆ€Ý“R¯¨$Àìšý.×׈”öäÆa܇ò_¹.×XòÎp÷\ìrmˆÊÉÉi t ŠG•"5x@ÎùÜïq&Båhîh·ˆêÀ<ø½ÜÇCu^¾|ùýáš ì9)>>~ËâÅ‹7†Ë‡‚Æ…ž\¯å×ß;ñP¢%ùÕ©¬|p¾È•ïYjv" " 厀 ”wÛÄHíËs‰§Ø1a +m^8”Õÿ" " 倮åíŒj>±J€Ë,eî÷ß( ˜OßpÏá÷L곊'’;š ·KÁÆß[±bųi°v_M¸TˆaZIÃ'_S!P¤{Rúú<ØåúêE—ëK­Ø¡ÒVTZØÇO²/ýÍåê~è°ØÿÛ¯b¨Ž" "{Šý^«k@ì½X4ãòC€•~ÝÒ&Ý“B¨úŽÌ—Î ÚÚ³ÂÒnçcï¯~&^OÙ)ÄaäP~€üEä÷^ÍJÌ:vì˜ÂÓ¸Ÿã¸;å{Iíö@wP·••{ï“?šø;qõ·R¿¢Y³f§OŸžÛ¾}û¿âÏSÔu œ» ¹&¯X±â^Úñ13pÀ×VÔ>CŸ¶¤9¾-ùÃJÁ†øÉŠ\·˜ßN||”ñq\{MÈO"ù6¤«àtÁ²eË2á7_ï£Ì法ønRRÒm999ÓöŽ-¼„½–aeçâgŒù†c׸ØÝHÇ VŽÝ+°{'õM9ü‰ú»¨›ã©ͱ‰°õ‰öäìÿƒÏ\æ?…ò,úœNY&ñCޝ%@ߑԿÍq"ÇÞ@Ûuø3ž±e>ïã§ÃíÌa6sCùÆ`ç+##ã}Ú7ÄΞüþAVVÖgfœ'©_¸dÉ’oŠ{.½*6)Æ^‹€ˆ€x<[\l÷vý8ÂÇÀ<>Ÿ¼ër½âS¤¬ˆ€ˆ@äÐ5 rÏ<R#€Ø¶‘i"4$½“Xà ¡¬>"• Š¡®'¶àxicâ2ÊÑ~é«?A:Š8æÁühÖ¬YoSV—x e!½´&ñe<;ïv?SûJ°Šx)ç"‰sY£8ç’þ @@"eœ¹ " 1NÀ>$­..ƒ\®§éëlóv¥º\ÛÙ74äk—ëâÚôô³_î‹ý幄c«»ˆ€Ä ]båLkž"àC€Õnë8|‘ïD„¥;}ª\ˆOgr\Qí<„¬´ic"¥µá>é¬ÌûžìQgWXÇÝ­:#Ð5çж8Û ¿)žºãH/@¸JJKK{á ób{ð9çœóÙìÙ³§³ªq+ñºÐÎV.¦¾·õ%تHûŒP¤¤mwêmEßEø6£gÏžU333Ý"e0²ûKúÿ••ƒ—aãiÄÀ埀(ù<¶^ãx2åÿ$ÿþWCx3q5…¹í¦nùT¸ì%5‘ônDѤ+©«Ej"å[¶Ò‘Ô7</ã›D]?xÔgÌãˆq”_H¹Í¹ v{3§}äauéb8½˜zyW·¶&:áKü~™~`ËÄÞ âÝVIÛ­$ –wí¶9ù@)óx¾`6›~î×çu?¾ÛÊÊKÍVqÏe ?T^¶$R–-o&" "p8(Ó/.¸äß.×P>yJëQÑå:ò~Iý›Ë5 ` j!" "fº„ùhxˆ4ˆM5<>ûÁÙVϹíMðªÀ*AgK±‰kN°mÄ*UªÄGÄ?ÂÙ^¨—f¥ˆu‰g&¨™èçlïOþ«³ºÕ!Й¸ç ت̸Aý¡~ ãN'ÛÖÅñmä«‘_î5th•  !n'âã^êÜÏINNNE´´­ÝçRf+GQ ÂíDÅ,ü²¹åcÇ?ëf„ø+¿ÒÖÄÞ$ò¾ó·•¬Ïak]—.]fggEý*Êf˜1Ævo%·¼D̈˜6®ñ;@½»œÔDßÊîƒ?ÿû‘ì„?ƒç°™ç|ák#³O¹ùœ'p.Šu.óÑAØH¤ z ," "P|::*Ûåzʱǯµ|BŸt%/yÝåú/*å›N½RòC@×€òs.5“Ø$ÀêÈz¬ ì„˜×Ä 8ŒÈ¶iù¥&@Q÷âácˆdà C‰>ßÑζEßÂ= ¿ #ŽÏ#.úàƒv!lÙVo÷ÛØ<ñš1Þv„ºOh“N4Ñí÷5|UŽ&jžÁý s˱•ËXw3ænVQžêiÜš±öèãÛ<‡#´å’ÞEÛ'‰;xªõ”yÌž°ª2žÕ‚üV 9‚ᒞؘh"åw”å`óZÆØDY3bâõÄ”×'­Fݤ.ܯx ¸mÉ~Ÿyð\2××Ìë=ò È·bÅå/œ‡ÎäkÐf5ý $±2sîÄXdúw T‹µ©ëJ¬B¬e>áÏûø³'Øùb%êoˆ¦öº¹ß~%µUùRy]½Éy-ð\2Öí´ßаûOwOýÜ*|Dx"'D@ÂF`Ê”)vAS¨"ÀÏÕ/á°û×k>ƽw)7ýæ¢v·3 VX¾ˆBiÛ]D@D@ I Z>èPȪf"¡¶ÚàÚL„°çÌED¦í˜ôZD­eˆa÷q|õvJ·°H4 6íCœêOßlìÏÃÖâ7” ötœàÇÆ³[úØxvOKÛFþ+ÉŽOe5à¤ßofµbŠÕ &(RwmÛÚ˜Œ=€˜FYOÒÔü±'››™†(Èsma`ÜJ"¿»ˆx¶BóⳌ¹–ö§0+]|Û÷j²¶Åz6Ñš“ÇŸI4ž =ù™ˆzn±’­õ¯bǼHÙϰ_BŸ¾Ä8êS÷&ùH'?¡] ÆIZì€Vt6ŸL¬´må3á_‡ÔBÀóŽ+M|ý/þØ–÷éØù/ÇÛ9~¦J•*ûÈ=—v¿Pú˜ï¯"rMª!ìBAD Æ Lœ8qoè?sñºnèСÇ8M¿ì¤2Ô|bb±ÐašËuŸÞ¦Z.d;ù¤ÖŠ›è¬§,îß.×BRûµ×êþxÉ¿b…TzË¿b¦N" "F“&M:/z/ò¥íèaÆU-WR£Xﱺ”ÁÙ)Ý!Fb~Té!ëÑNÀVZV®\9Ó9V'^Î|ƳBðtIJB}WAxªÏûÙ>Úg•E§Nñ½è G+TwúTFØkpî¹ç®ól#ÏÓ¯$þä1äsÀ÷·8žÞN¿Ú}}ª¼Yàj×®½™ûcòÛNá+ ˜ÿÑ\2>÷íå¹·'›™"#ØüªV­º…ùçëS°siu¢é¬Êl—žž¾92f$/øþ¦ "ë^zé%{SOäBεî mI¸}øðáÚ&ë/ŒÒŸ¿Ýoè$âjâŽÂÇ—Óz´]ƒYÓú°zò懶¸¸M°ÍûxVQ®¦¾’p¡ë‹Jù–»²hÿÕ ùIÄÕÄEëªÖ" "&L˜ÐëÿÓÄ&\ÿí»AÎ5×\“TÞë=V×€283¥?„DÊÒgõ#°Õ÷3&Q›÷%û Öšø9÷aìHŒ*Í ›Éöo[y™'àÛsˆxßæ)ÔATà‰êM(ÇrWpŽ §cÄIm÷Ž‘­iŠ@ax¾œ¤ðËÙ—¿Œ?þÊÂôS(&ûЙF,ªø‚#PÒwÉ—k©7pü ß²Çx øåýnAÓ§¬0ÙâúWÛj#" a%`×x»ÖÛ5GR<ŸÊÒ§â¾ÇêP–gIc‰@˜ðÞt¡ý€Bú6ñ VTv ‡@iÓG5ݤ¾d‹¶ûqk£]Xõº“×׃(#ï¼i%eäy$eNÀYI`àm”?̪ŠÃ~= Ð^Å" " " J€k¾=\ÀîõèÇ›²ZI¡„äVÐJÊ2€¬!D@D  H¤ŒÆ³&ŸcŽÀäÉ“í©iwòkÏÄí¡€m»Ar|v³ûYîSe,D@D@D@¢ˆ÷Ÿ…»·²b2¹·÷sß·; hSäjÆ=’x"¶Ÿ¼êª«Ù€:”')ËÓÙÔ\D@D „ %B8”L‰€—€ ”|°·'«õ-®ôKfüXñ7lÏÊJ{jš‚ˆ€ˆ€ˆ@àºmOwý†kxóBºÏçŽç Ù¶ÈͰm}ú¹£:ˆ€Ä$^½z%å¡/¥ )Òü)íùʾ”5‰”eM\ã‰@1Ø J(IgrO–OŠa"h—¬¤dì,Œh%eP’ªÈ"àùQñ˜p¯¤ä)±§z>Ë|Y„äˆ@$àA9ÿÆóù®Ó’'rg8>mÞ¼y5u¯¬X±â §¬4SžÌ]!¿§s;c–µ?θEIáu2ï·¯ñým3ÜR Û—'e?@¿ ôyÐ郭_›6mÚxúôé{²P§Œ1›û!ÿ§‰‡z,Ù‹|)#ÿÉCpqqoñ6òꫯj$¬²x›Þ¶1þ#ló~&ÔãÊžˆ€ˆ€ˆ@ÙðÜ®e$båm|¼—QÝ“2·4>k¼üòË.~µ\C~Ûš²!¨QD@J“ÂØÀ6mÚ¬ôƒ[D\Îj6ø——Æ1bY«Ù³g›zN ûeéO  *‡åª: à=÷ù‚Úú×s}¸±rÎr‚]i#‚ÈÈÈèÏõáÃ.]º\°hÑ¢M¥5–ìF>@¢Dä{.E@J®OcÕý×^{í?Jm (SžŸ±§{óãç#\óëqÍ×}êËô,h0#€Ö’÷Ÿ'ˆGñ^t€´…CÁpÇmÚì–S7Q>Ï©CÌœI¾1}fQ—BÚ†t«ð®ëÔ©Så½{÷>Fý)ÄÚÔ}NÝ•Ôí¶þôLÙÝdíVP7—º{(¿Ÿã‹‰É/!µ…";üΰ|0RSSkdee£Y{¢ÝÇÿ„·ëÖ­ëkß§({š8œØœºïyRy¿ôôôÍ &šâßXúœ@Ãÿw$$$\²xñâm°kGY…˜M|_ß èÖ‡Õ}áã&Ì·2ÆzãWáØ–qöø¶ 4&~N Ý±Ä7ðézÒرկ·Yÿ‚Î «4í> ¯c'.''çQòƒ­ŸBl¨›ÓÖ¬E@ò#ÀÅä q=¦‹ØÖ@e~”T&" " ÑOÀ®ñv­·k¾]ûí3@ôÏJ3ˆUL ÄßôéÓçdîÂûw›7× g)3‘±ªï¼(·ûôßA¹Ý+ß¶(› y¾µA ¼Ÿ`2iÓ »-)ÚÂñÍV‡Ö…d 6`¿yRRÒi÷´:Úf•ä²ËÉw´H·@I™+˜?»víºš&[ëÖ­Ûš1Û‘o€@y;súùÄÛX zi ñ7|J4ôïß¿ ÞÁ÷×ëÔ©“Âøf7ÑöëÈœÇQw7å­Ïçø)˜guÁïùh›âáQϧϷä?Ü·oß>eîl 1ña8u'ÿÒ¬Y³Ö©'ÓaPûöíÿbƒ·aϽ{÷þ6zÙ–{ßråc‹@ØN>@î?®âàæ…Çòå<êq쨈À!\˜ì׫ïHÏ`…EÊðáÃßòOÀ®ùví·ÏÌÖ> Øg(U¼×˜µk†Ý’c¾æ,Ò}é³1qq‚]ý±s"zäY³f½DÞ¹­Žô\úÌ@<\mÇgœqÆï$ý,_’€ÝK’=àÇs?Ëgm,³ÉxÙÔ[ºtéoø¹›òw(nZÐxˆœ&ú%ž{!þ ®R¥ÊψM©«Æ½;?6;žíÑÓ笂ìÒÆV]ÚªRo¤,Ç·_­ZµîÅ~/VNzEÚ‚Ædž9ÉÉÉ#mUä’%KÖao)Ñ™gÀsâ;®çuðçí(ßråc‹@|YN—z/ôóRû£â—ŒÒY¨íwnÚ´)1;;ûüüáÿ)o^§vîܹ.*ü‹ØèJ¿\Þx6P÷"uS­Ç&¬Ø¯*y¿ZÍ›ÂÿœBÏ2å©ô+ð—§OaSûu߯óä~#,l?µpàWÄã ´!œ>hlð:t¨}Ù=nÊ”)Ãç…Fˆ|g®ÊwùŸ|çËq±o=ð˜î±eÛ¸ßExûÒ±M~‡å1oú‡WðŠÞï@û÷ï·]eEÖH˜KÄ_œñ°‘ÌŠE·ê,xÅW|ÙÆ±­’,(Ø<~ñøènËöë–AshÂÞñ¬Ì3fEËvÓÖl{þäÙÖýÁìB”ÆÆS·Ó’/pL¶¼{çI—L¢3Ž¥ùžÊó+Û®£Êt%%âà$8ŸÆ=z"â5âÔ–,·â&©£þg!VÆ[ä¦+å[œc–ýö`åd=îO°º/XÎÜÂú³ûF^Äc±ÛÝ9ÔßåôsR_Òi§TDàO(ÿd¡œˆ€ˆ€Ä2}&ˆå³¯¹‹@Ù`!ÑFkß­[·:6*ÂÛ±$'òý¾Dz@v:T­ZuÂåò#_Ñ·¾zWzroÇclá>®¢®•›}»'&egÓç;¶À\~§¬‰åmë8 ºÜ‚!HþKœäß³v¾ÁViÒßì5·òÂŒéÛß7_À9ñmjùfl›÷nû÷¯üÿöÎLª"ûÛM2¨$É3ƒ°®f2‚.(*(¦%]]Å]ý›Pe\* Š¢»`XI‚² 9‹AA†A!Çï=MßöNOwOžî™þÝç©©têÔ©÷ÞéÛ÷tU]å ?,ÿJ]$¼¥©æPþ}?HèMÝòcˆ›>!ØrøÌöüŽ1¶æƒîEò ÈÎÆÖ¾>vPGY?Ú~„ãöò:D@D@D@D@D@D@D j ØD"ž‰9xð ½0Ŷ™8aÏ´„ÿà;h†ïà9Òör˜Džw›â7xšçòÇyžIz*ò ® i{#ø1ž…í9ÚóòömœÈ¬¾mÔ}—’’b/Ïy’ªy¶þœ²×H¯¦Ïdâ3 K;tè°Â–TÛ36åÃxæ_O¼=g:t¨2–Ê&aýçþ‰È\ÇRe{¡Ï7Øñí²}ØKkÐw~€ñØ<GéãqÆjößA~*ñ–ýû÷_BùP˜ ïÁ$°ÍÔ%Ñv“ÂJ™ g¶©O*|„¿ã!X˜Æöìü-£>Ci wNÜmð{\ ãåíî:¥c‡@¾9)ù±7nmu”b.v›¦œfª²SçŽùçlD~•»ÌÒ8-Óü£ÑG#.îÞŽÿ«øgýÆÉ»bûE …” øÕc@ÃÉwåŸøt¼B»¶ô™Ä?»Õ ¡îjâaÄÓØ£áÊÝ»w÷%ÿ*yÛK#èÞû©°_„ñ~ÿàŸðr3ù7 õÐÝŽ¾î&^Müeß‘¾›~ÍAzÂñ§2uS°çÂôù‚Õ?ŒlUâÞ„~Èn%Ö!" "7ìWö˳ z² ² /Qè% {@ôžYV€ à4´çâ7[¶lyÖ‚ ü|Cº;ÔÐð!t UgŽFꮲIRl'WÎçoð‹“ÁlÇçp„Õàù|7yÛ›Ñ`ÓP&'ý‹gò2ø¶;”‡´Ç· ûr›Ñˆüq›”ä´Cg%:§Pg!Ã>"Tßç0Gá.§uÓIOÇ÷Q-!!agàD-|¸N]‰c±v¹råv`Óa§m¨Ø=!Ìdð£Øv|µè×Û$\ŸÔ¥Ù*„|Oo#þdtNLÎfÔâ…Ï# /G‡âØ!oNJV#ØÆ´Ù:ø'³ö霔A”5᥆SÎ?æIÒÁœ”øÇdrüc£Í –f¦c oçjÉ?èj› É×Jt˜ƒÔ¦8Û ø5¦6oí=sæÌ1VêÀú!zßãŸû>èl3àu¨¨îÈ“~øi6e'nk7Ø?0Òøõ~òOÚ¹5|ðL´v›7o~ ›f’|ØòÔMAÇdKëÈ¥ÐúÁ»d&“=ØG$ø¿¤f²ÄD@D@¢‹€îÑu>dM!$ÄA™ãQÚvr(±îðíóøsº _Ï9gº,8÷f¥Ä6øÛ0Áé¿8>w;ånç¤SæÄæH%8Ù41ºOQ°9Ma.dÂõN}¨s‡û˜QÛ{‡á1_‡Ž&oNJpßã\óîgàæ“­›²ÖâBßâ.LsÁ~ï^`9ŽÄŠìQyÔùµ9{‘ÎÈ@¹ ùmN6Ø€-ÇöØ ¿T\EÏôéÚmDg1«£Ÿ‡q&¾Er Ó¸¿ÅhKÏ?²º`ö¦2æèjKlNJ þ)Ø|øxÇl\(OòýÂà±iþQ×›Nl‹'4dжÿWd=Œ»&öÙtö°Ü‚Ù¥2,°…âí'ïæ™hö2í<žšD ú5:D@D Ð= Ÿ<™.ÑL€çúò<ëW´‘ò|óÓö‰<ã݇Vøq2\a ûÔgþ(š_ÝÕ©Sg}Ù>MÜ}2‹±3μõÌ4¬à.LsÑ~MÙeìQÒ]Ç’êYBm3\²tð`3,Ó8o£°NÕ{˜}6NÀAô]ÄqPÚË|Ú3C²åa÷$›šžN‰¯çãúA´h[~ý°_H¼º‹Ë”)ó-Qu‡6”¡Oï/*´ßC˜Í?l'`W çÍ^ÈðéR$" "ûÌÙøÈõüiMˆËD°›\o‡í|¾7¥?" " ‘€îñ¬Éf( ˜¨5…güçâE‹v!䊙p°÷kÈA™+4 ¾’|sR²GÂQœm‚l3'½8” p²=CÙ;¾)Õ!‰&&&~Låö;w޶ý%Øï¡8zº óft¼²a+p(ÚRño˜Õ¸˜Y•ÇÙÿñVòö\jÇÇ7nìnBÞö"}ÁQéÔ–pý¥ÞtMçŸn£ï-\W’O÷«ˆÍe ‹qjþÅ焽¹¦ŠòÙ„+p`Ö·¼™M€—Ùø-¯#¶<÷Üs£±MÛWƒ‚~ ”Þü2VÖnTY9žF¸âéÏûW²ÒN²"†@AÿŸ—ý1~ߺ뮻Fõë×Ïcq˜ë<Úªtˆ¶3"{D@D@ 5|utñ Á(fRVÇñ÷9qYœoqäMŽ‹‹˜eÛçä-Ìf|• p7ÌÁº§boôÎʨ}êß5Ç'ö-žâ¤?%¾Öö§Äî'pJ¾NÝÌÞ¬ŽÎ!üÊñ,m‡#73>õtò^gc{l†7wìØñ u_v‘?ÊØ¾afåã80Wÿ„ '(ïcTôQ£¢ÂH€Ù»:tTñ 5=zt-ŒCÔ˜b„Àú¯ç{6|³  Œ¶†Þv?êdÑb”Ûä>ö'êIx‡ CrD Þ…-=õ/²KJ‡LºÌó&«E@D@D ¿¸—çWŸÞ~˜XÉÙƒ1«³ÑmQœtYÚ˜6+ý˜};vÜãÛT7MS[âÍ~’©æ(LS$ƒS²ÎÄJá6»õÉôä¥=ï™ÎöíÛ—åå<;Ø3Ñq‚vëÖ­Xrrò™ÙeÄ4<§:ôxÌÓ±çãÏrY,>Óßæ™1á–‹Øý'“'Ãì[¯QMl#á²™lä³icí Ë<[²s.!ÏîYèÖQø èPøÏq¡¡î…þgv€¶à`Pf…%'" ";òu&¥kNœm>Çaž>ì™}·ÉþtVÞ>ƬG{Nõ¿ôƯĕ0™bvæÕ,Ÿ¿{÷î®”}à8(MÔf’¥¸š))" "wz º‰=AeÇAif™—óy{YV=éñ %y/A‡ˆ€ˆ@ôÐ= úÏ‘,(„òmOÊBÈ.W‡ÄËpú0£r¡KØŸëÔ©SŸ\í@ÊD@D@2K ‚ÃmC›2Û"„Ü”÷=]w7QÃb*ˆºDϹ%" " 1F b3)cŒs†Ãe™÷a„loMïþš¡fqf¨(oÎ@íÅy£ZZE@b”ÀåQ<î»°­úþØlÈœO €7¿ýÕãy—¤½ÍfØgt¬Fà·Œ„ò©^÷€|­nD †èþdGÓ= ¼¥ª\$ 'e.Â,ĪÌA9·OCÈsó¿ËÌ÷hnM{¬€.óz²ÞûDs™9Ú ôefóAF÷€|€¬.D ÆÌæñêÍgG¶‰€ˆ€f1í¤dH›(sŒ7hˆ¶“Ì‹{Zñ&ñÑØviNídŸËjŒ¯ëòåË_Éæ8í×Ü6Ùl«f¹G`nî©’&ˆ86· ´W&{•!¥ äÔNö¹lKèÀ0²ë¤´%‡Ñ2£'ÂgCÝ‹€ähþL™Ç¯ìñ4¾žD©Ø~ Ûzz‰wO’‹s¨.Íuˆuõ)…›€î…ûüjt" " "-ùê¤dv`—'N<¥•y9Ì(gW1S°qfû=FüêŠP÷{2÷½õú Ê'Pþ$¡ ᙕ+W¾JìñÍ6ìO}[²_âÌëgoÄF×CVÏLÄëˆÎ%<_¬X±ïlf"²;I?ˆþÅ8(o¥¯ãÔnذ¡í¹õ¡ a)2ùštš¹G°«/zRi;šÙ‰ãxÛxÑ)S¦ô£Ü^~s6 ÆtîÜy¨½…ü²Ë.«A?R׺ÔõÇþ9Ø~,úS^•²s*V¬Ø0%%¥iž‹=°õCbïá¶“Y•!yPד>¥QÂŒ¡_\\Ü6Ú$_ú ðîŸÖ葲úŸÍ8ú2ÖÊS>ûrk•#]èGÀ~¼ú;ŽÅy/["毣­éàx‹P”^ãõGD@bˆ€î1t²5Tè"P4¿ÌÁ)—ˆSîuœbCWã »‡Z=럺ÛH÷Æ©v=áFêÌ‘ÖØêLù8ÒÌáhNÌ̡آE‹xä¦R?çä%”;zôèÛÄÖ¦*uOÐæ²7†’€òkHO#ýWbz«RVÅ—~‹üñ%J\B»/°õ%+w8ùlåßÔwG¶;zF˜Ó¦M³·¶þ•ò{ ·’î5uêÔÞÄž#G޼‡ìÙôÓ”º×(ú”¡U£¬´é ÿuîÛ·¯ ù±„ÁÈÙäöïA™ßNdƒò€É9Ô½BÛ^42çãjÆ0¤]»vÛ)DÙ"êïC®2ñÊF/^ü|Ê"gŽMìwÒÎïµ2" "£æ3îO^àÏ®0'¿„í&²û‘‚A@÷€‚qžd¥ˆ€ˆ@!#o3)qèuÄö53ù&Cœe¯ÙKOÍ©Ø›èµøøøo,¿qãÆ1”u"¹Ìò¤Ÿ¥Ý’kh—ÊìÀ8$¯¢ü{fý5p¶ýЪU«*‡2ä§Ìr\du8™㙀ì:ä>Eî+wtÆ¡«3N»‹/^¼•ÿÂɘԦM›â¼u›çËÓ2]ÑûžÍ´œ×“?FùŸÉŽuÊÑ7ž|OfQ~Æ,Æ68ë`ÿÊ^¡®qWÂ*Ú¡üItœB—ÍÎ\‹Ÿq”wG.Ý\:¥J•úåÀ-óêæÍ›—>~üøJäÙlNÆŸŠ’£èþÍ×Ïš„„„‰¦xóæÍ!;“äÃK–,ÙD<Œ #J ¬ÿz¾gú;:EQzzdV&Ø5\€ŽGøðìô§ø?³a´íi¹àt;û!(%*ÔDÒÐ= e Ý àI“É" " "òÍIɘlà ר–:iœi ¤'%%ÙRps0šcr¹¥í`†ß¯§SÞ¿û©3§¢Íô:!­á8ãRp Ö´<õÛ,ö‘]ki”GH§7ùºTÆI·–´Ç{ä?5ù€ã\êmÉž÷pœ 8ppúm¡r!ý÷‘j6nAΔރ¼Íh4W‘ÞJ°%%¶4½>i?›K ê¤ Ægê^ì¸Ê¤ÇŽ«Êè+fºÝ:ã a½Ë)G΃c³¦9h2ÅÑI`Ã7 <tˆ€ä éeÌ8ç>›._? ]Ú&ŽNËÛ½nlšJTBÐ= $Uˆ@^Ð= /¨J§ˆ€ˆ€„!o˽͇sìÇòç»Ò»qÊÝˬ ªp”/_þ*§Ç¢9 ôë²ìÚ–DWdéw²•¡ï¸S—QŒÓo/mË7kÖÌö‡ô8r0{1ÝC+ŽÒ•8Ú^’èXO›4KÒÉgt¼‹îÚð[J_+I›ÕÍqÊRô¯É_HÝ"_ßÓÏ*äìå:¨ëc¶bÿ¥”Ïͨ#Õ‹€ˆ@ŒÍx7wâO¥L„Ë‘aú¿ýø•Õ ˜4Ñ!" "etˆ²’_æ0·¦Á^Ü‘ƒí¹ºò®…týóL÷/ìz,F1Áå ž!ÛF¢ïp}Âd;vcnHÿN6+uîñ¢waHVÚ‡’Í©ØÕ [V…Òï”s\Íû>ö0¡ëËÜ´ßô£/èuÈyI;á̱¯ Ä¹Í.7Çí¾rjg¤?ó.Yu„9í²/ÇãœdñÖ7‘·½ =8èö]g³y»ö©Y³f°r;xÙK‚7áûC>ÑÉ£kÿÏáP¬À BÿK (ÿ?GÆbòtò´_Gº¶¯üWùR҉諌ü.§Ü/\¸w(x:!sFݺuMš4ÉëdõÍÞìÀ‡MÇX:}Þ¦ôg“oâí× Ú›£Ö»ì1/¡¼WÈ÷‡çht¿‚Ó³”¯/o ºÜv&¸Û¸yPÞΕ:vì¸Çç`u>6‘¯:sæÌ’Ö–6Ïó‹Êèäää3ÝÜèÿKªÝKÓM\‡ˆ€Ä:Ãè͇÷Ÿü{tdLäˆü–±˜$D@D@¢œ€îQ~‚òÊ<žUÛ: ßVFDâhG§oE¢ãP}2Áå>žg?Uér&ܬå%»×ç–îñ²­ÜhVHzŸåsª?·í e×oü#xÎ̪ɹe¨þ kynžû¼d”S;£à3Ï‹'ßœ”üƒÿÊÚ<¼»céùîææ~÷Ib6ß~w>3inÇó;(3Ó&œ ú‚:(Ýmùà.ò¦}ÎÖtåV°hÑ¢Œ?h»Ð7S¶s:Òµõ9-ýË×q°Ú^i¹Æ-]‡*ÂE`ñ CD@D öèEçÜVб®Ï^¶j!ÍÁ³æ—{}ì]AY<é·:uêôØ”)SþDº/çóF“µí渦aSû¿qÚÛxèç9ò·!o/þ {öbß?ÑiÛ¾N¸‚L¸—r›f¶…“Í6DGt·EôKû?3ÿ c}ÈÚRw‘½käyÎýwäG#»“ôƒØ¶v·:ì°!ݵ‚Œíö”æ@î/zRi;Gñ8|2EáÐò>”ŸMƒ1;wj¾šP×¶_øÙ“’’b?`¤»Üv†ãA]Oúu?0Î~üïo£½ÿ3óÔ#ÔµÙkÝÙ:Šf«U6qñضÓÔn–îÌÉœš Uj"" " " " " "clåšm±…#*ÙX›Û@IDAT ‡Ïƒw} %œrž9ëó€_'A)ên%¿›ºó»Àfs¢ö&}=áFt˜“Þÿ=è5GâLÊkÓþaŠFâÌ­HºisæmC—9kÀd)åÿ t¡üÉ:”$Ns ûmd“—Ò®<•ULÀ§¯®¥³b²oŽ3ÞKÐñ6¼l¼ôçí'wë™îÄ©Œõ"Òö. »¾Òn;é+Ýõ—F˜Œ½‡ûÆÓÖœ•vN½GîÿB~6ŒÂÙý 骎ýÄõÈ÷@—9çÌ©ü‚9ß•© z]‡»O[òû_t\Ëø‡ÒG{Ò]¦M›ÖG·ý/]žê&É5Õ†è˜ÛAiå\2fO[lkGûçhcNlûqÀÎ雄œ§Ô¿DÑx+·¹ cbEk<×ËTêgàœ¼Ñcü¾íkS•º'ÐõyûJþd¯!=ô_MÎú§Ì{îI§»VLÆ}à4‡ûèíŽ|wôŒ0;àp7å¥ü^­¤{M:µ7±½c%èÿ2íÓ|öìÛ·¯ eA¯Êýv†âÿs¨{…þ{Ñ­]W¶àÀϼp×Bf®YSv|sRšx·ã‘}‡ðé5Ù5ZíD@D@D@D@D@D@b‹ûM±9,Ìqe³‰2}ð0~ÇÉ &ÏìâýYòì¥"<°Ÿ"ÝÇcmf|Æ9ÕÂf6Ql[}Eþ7ë„üžaŸ$ÿ í»R´&!!ab:uv ÷1òMʇ8'möÜ/dSÐ½Ž¶^ÇŒÕÓvÔ’%K6Qöu%ŽÞ-TÍe|ÍL†ØfðÙ¬KsØ ÆqöüLx—¢•Vn3¯(oCýôµ™:›©¸‘`ò3Ñq¹ÉQoÎÜO(»Ìçx8Û5óë›8DûŸ™‰l3LG1Ú7e\§Ïõ×\sÍ›a‰ÌQô¤â<=LÚ˜LáÙ~2:“îMÑkñññßÌÆ1”yªè»'ÕHÆmλo)?„ãÒqúAÇ0ì߈œuËfV ÇiI¹€2ÿѲe˳ȘËfÿm¦Í@e@‚öÚ“8ä:c×Ƹ•±šsï9Z¶º1ÍxM}8î¾îS±ý)fCþŒž‰„D_yЈ¾Ó]‚8…ÌÙ·ÖXÃi5i›iê=H÷&‘Ž;lRw˜þ÷Û,ÞÓÒ¿ÿ¥îYt­AîJS¹îk„»®Ñô:ü]cšÔ|Œ½_úêæ³a:RædµkçÂiZÎtÃŽ×Ì6™oÅvÞIÛ,è§kÕªµ“ÿ½·IoÅ!h?xêÓ ‡dÊ¿gœc™=™Ìy@þjç¥Tèø”~Q?Çô¡héuÈ}Š\sŸjoêZ±Y¡n9ÚuE×{0X ƒïÏõäQþgäÆZ9}Î#=žÐ3£kŠvþÏžp׺ҴKǃÿÃìiIÿËùß>€]ö¿Z=ð3/ܵ€Þ ¯Ù4†d1“¯NÊ,Ú&qð¨\¹²½ˆtágœhÿÉ ž«×8Ûsá$ø‘¶‡6oÞ3êaêÌa¶†¥˜«˜¥Ù!˜^úÜJ8euÈÇòr›]p|O]mfÖÄ®Tt Á¡‘L¼ñÔstRoŽ;̉´Õ± ™#”ÅykN;`?·42õq˜¬ð•›ÓÑtÚŒÍÒ[ð5˜ƒÓ{·Ùj5q|þ‚¦8OÊ‘7§®Í‚¼ ÇÃijóŽƒôv‚÷ ì‰¸3f˜=hן÷üŠ3ñƒÏ>û¬Îi©´Ñçïùj;LÐ7„üeÖ‚ºÌ&ýŒYr»`2ž:L,îõEP·Ídì m6¬õføƒÜ“uò3ã¬ÑVÆíµÝ7~¿·lfìC]Âa¨Þ~ÍYƒcéS›ÅêÖå¤Ãq7tÙ6w^¾ôoÎÁ4ö;zœ83××L}tú¯ôz¯ÓŽ»ÓG°˜kêWWù~ô˜³6žôº¦<èuèÒáObëb'C»å„š–ÇnsÌw…qQÊlçdGΉ)¯‡œ×oe¤—YÌy'*Býjç#o3#Û¼Gˆ1ÙÿÉ"GÆþ÷ɧ°´ÙkúÜ׎­øõ^üO§»ö¨Ëìµr.²K>¹F±Ã6úJàº÷ÛBýBÊjfâšòö„»œþœ8®ë½è¸ŠÏ§ÕüoÿLÿ·c«ÿóÉiKyìl:ÓáÉÉÉMнÜÉ“þ7ØÞŒ>}—[À ÔýÌŒ°?[Þg‹»íLŠÿ†bž½ ˆ´ÍܼçÌç&ê`¶c5œI|®W†Í³Ùo¥|ò¦£\ˆ¶¶¿f/ǹ·sçÎq8Iá\:‹öEmKôý†³ÆfЕAÖgùðÍHKÂÓÍã@5}îóJgPûpèڌµœó¬!ã¾Ûžõ!²éÆ› î¦&+G¨ëϯƒs¸›ZpŽkÙ5Fº‹¿’‘OÇÝUŸé$zB^×Ô½C(¿ÂœÇv-p­]‹fñ&šFþ„kKù Út·åØv.icrèÚBy׿–·vïÞý“OÆŠ‚°›M»Ö¶¯§ о;ц ˜Ó3KG׊[×ÆÑ™sUÊÎ×êxl°½%ïMƆr›ålÛF,ÍÊ5•Áµà¶!hšööùô-9·ÙÂØv+yçÑÿ™‡m!¯ä3¼fƒvžÉÂLXfRŸÄD@b€Zö¹§êm¤Ëñeãñ~…~xÛ¶m%ù²´/>˜çñk×åö‹/‡¯ £%íNps±ýd^¡n‚µ#ÿ‘ûæëUÇôøÚÜì—DïÁº!¬içÿuÌ©ËLÌJ{ÓÛhÚÛ 0߯9fÏòEûh¾w®E@D ‡t/È!@_sÝ r‡£´ˆ€àsiß)Çòõ|Gü¢ï2”ÿJÙsÔ½Dúß+;Y3Šžàûàë|Ÿ}§ZuІ°wÝœ_ãð¼òE”ýÍdƒïŽöÖìÇ©_EüzO ³=ô#ÿ,v '¾›ï»ö¼=¼×™é´#ÛGÂŽ ß²¼uòŽ;~¤¬ý|euÖ}÷ ùñß0ÁÞ`þÎQo=㚉}Cç|“§îK¢ 2rÎÐ~;ú†!»ˆØöå< {¼ŽPây°²—¬xg1Rç?èo6LÀq´™±ÿÂ8’¨Ê2êƒäßí âÊ6–¡Ç^t²Ù¯ Ætcû;¡™½í| ý…ÕÊ>_#{Ëúèû+º3Îþ̺=ɳJºñ†ãŽ|ã°F© uý¹EyþY‰êŒy%Îp[’ì_Á¸Üj2L‡»®™áô: ¦”s± çñW\ gR¿'ÜË.¹÷±ÿVf÷~è*ó'y•]C-Øjàäì:2‡ý1;\?=8O9O}yÞ´Ù¸£p|¯ò7’àz^D»áØóí~±óK»kƒˆf¶(èµânÌlÏ‘Ø÷>×|}ÙŒDï^¢8V“)ŸÈçÂ&‚}fÌMLL̳`Èÿežw›¹u‡»ÜraÒïÒïÍ0YŠmö£Ší½y­9N‰ýŸy\ -àô3Žgè Ÿ™aúT•ˆ€ä->ÔÆ¾ÄÙo=ñAU‰±Ù”½`y[¦b¼mнÃÉÛ>hϦìGn´O9ËSh߈²Ý”µ¶ö¤?¢íÿ9íœØêÜreøyž»,+isRÒOØôeEÖÆ„ý§ì¶¬´“¬ˆ€D >?u/ÈáÉн ‡Õ¼ x:/ çûU\àrm¾c6æ3kõËÃxÅ`ý[›õ䮳ï®öðî.s§íؾ»Ë,ÍÃ~ìº9P60©Õ‚½Ñ}gÚç´õͰL·dÓ©Ïnì¼\ÄÝÞ¾»Ú¸Ýeî4õåœÙ”îr+c eÜe9McŸ‘ÎPöY»`ç,Üxs“{°ë/p,ØçW2{MÙxB] ¡lv— û|s—Y:ð3/ܵ™k6PfòY:±™Q(ÂMÀ> ™&¿›_¿jø–ŽxÌeu~‰¹˜_]üûÜØ/?üâ÷)¿pUu¨pã±_ŸºSv¥Sf1å-ø%pmZ®øs¿|t˦iÓ€ÔHúì@_õéËfbÚ&?ð ë½üÒäßTÚi‹n{£Ü`‚ýÚl¿àµ¥½w&%Ö6³²?:ÛRþ%Ëaú¡óLÊÞ@ærÊ<Ü$GP_ûöå¿$ º&[ÿOì ˜½qðUû`ç×ïש³%${‘{]ö+þÈw#ÿu-‰'Fü ¡7}® þu„d½è[@l6ôDöQ’u?À­SöWÀã!«§íuD6»ôyê¾#?ù¤´©ý&£CD@rB@÷Ý rrý¨mÌ0'å ü¤Àw¤Æ|šÀw°?æg¿êKDà4þÿl%ž=Gu¥¤·ó\È™Î<» ¥ü Â9„Ž<“µ´ÙͲÊNé<§…s˜•ˆ@nÀAÙ›ËV·ƒÒts£ù…/~~e¨þ¸é4¢.ÝìE›Šï¼UÏÚÒG#nR½€òÂ@82mb]+gy‰-K™Æ³qò½KþU+w¶ uc ƒikÎÊöN½Í Ŷ©ô;ƒ¡íetŒiøoãè\OÙyVvì—øzÔÕ°±Û’•è5á_¶æŒM›6™sòÜ2eÊØ[ù:!÷”µÃaxå¶ ô•p³¥/Ö¾õw“^MúMÂ6o€Î—(O°_/ÏAæÊz‘µñ¬f¬C¬ŽòªŒá êléËÍ„¡ä üÒÓHÿ•X‡ˆ€䘀îÞû€î9¾’¤@ò‡ß’èé‰üéM½ˆ€à™åe¿ðœÒ/”ƒÒÚðL8…ç¤ÈÛ¬æe¤›ËAidbç“2vεF*¹E Š~Ë®2n8Õ{3Ѿ _(ïpޏ‹ÃµÁw ½ RRRjwêÔi4οòèhØZœ‚Þ}AHsdpHv!ÿ=7ͱÜ“¹! uëÖ­m*ÿçÔ_ÎÌ¡¤mì%l*>{›\IŸ~Ç,òÏrc]ƒŽOIņØOñ©jì«r1oP[‡µ³oˆ÷2À!š‚»i›“ñkK™íñÙ‰ò§kÕªµ3!!ámÒ[™Ay>{º¤psoI?Ëq` |%Mmÿ$ïAþSª¡g޵¡péuŒÇöiîS$" 9% {î9½†Ô^òß…vñýÏVÐèˆþ_à9evFݳòëk“åÿv"i›Ì¡#†ÈIC'[CÜ €³Ë6 ·©÷i`6…¿všÂ gß#[/°ŠÙ…m/§¹W¸1µv7ªwœº`1޽‡Ñ[…º5S¦LYÅ2ír8 m6£-£ö8ûüËÁik³9uÜ$ŸÂæÆ5‰gR~93‡Z#7übô_FÙŸ~'%l~uÚïG6ŽÍÎ?B~ ùÉlt½mÏž=O2Nûe0ÝÁõ-VH?ñDEh¿š¥â»,·Ùmج{/㸊•«q’þŒÌíè/F÷ ¿ÍIÛÆÚk-ƒöé ýºä•Lн@÷‚L](Èu¬.²ýÝãr]±Š€ˆ@“2 N‚L‚D N:¶éxqfõ5qÛíÛ?d=_œ*¸ËÓ8Ѿ¦ì²À Á™©ø"o@{/P>³y{;q¶gvaœáÈ›¸i:å?£ï.n§j ¶ùßîÛ´¸"ÎÏdœ{³¨keô|‚½éÏòÍ™-9×ч#ð¤“vâ œªX±âfQžMÿ¥]wÆÙË©ˆ[{ˆŽóf¸xœ³, £:ñK|)½º>8îñé„þý…éëÃôè¼" {îyumI¯ä&¾¯Ú›ªÏáûiCÒ?ä–nö1¿½¶‡¹w¿rtÉ-Ý¡ôØKHès=ß7Wð]´[Îm»·ôòýë>¾«Õ2}ü m/(ÌÉwØL™uàÀFôy˜­k¦»¹íq—G*YÞn»ó‹c¤˜„ê—k§-Ï,éV€…’ÏJ¹½Àùgxîòú}ܼ³¢G²"Ÿ´ô/?i«/($øb4Š_#«s£ûœ¸,7W[V<™€3¢9çpNÞ‚îU–Ro ØMs-ηÞè•QûPõÌ,|‚üëØó3«#7$p“e¨+q¨ä‹ÓJ–^›Í¶Ÿ£÷°}i;œ%Ôßá üž2®kzò3Éw²}Qˆw#{›ýK½¹ ñÛ´½y›jK¸“p¢NôÉÍÁæ$£M±ÉßtàÀ'‘ïAÝDlé #ÛØrKßWaÿ6ôÝLýRÊŠ“¶½&¯e¹|il÷ëPBD@òš€îºäõ5&ý"Œ€}çá;R¾×¹·ÙñŠò=©6ß‹^#Ó„ø]‚×9Ãw¶D¾k¤¼ß­!Žã;T?ê?ⳬ?í#m³ÙŠ ûß÷†S Ù3(³· ·!,åûæú¶—HÚË›ÑîßÓlµŒ}‘³àk¶Ý©··÷çûÛô\@ÙC”í!îAùfÒ=©û–tšÃfýÑGêm¦æ—8ïúa{uÊÆ‘¯„®¯iw‘Óˆï„w ë·¹šÔùÇÇ*£GùŽø<2ö½¶4á ö8¿ƒ»÷Óö Ê'Pö$¡ át¿jÎ-¶z:{ä^l~NÏ‘öøìNMVø]çG÷sy.è\UÊÎ!¾Áá £‡(+ƒ]×Z=íÆÓÇSvç6G8™Sz0¡}û÷#å{vQ&ôÖ>Ør6õc:wî<Ô¾ÓÆö¢p!™p/¶.ÇÿЧ ;¯ØPœqÛuY¶ööy»6ü‡é#ó>v@ö×ÙíŒåFòöb™/ìÚX¸pa*ÏçÁûd/¥ÎÎ× vfÇû¦Œg£Õèz–:ÿuÂ5þ^¨ëÙ9È~†»–{óœô™éÑ!ùA H~t¢>D@ /n¸•Ìq—Ú—¾ U x_"“mlÖ!¿”§Ú,ÃÀ:'Ï8–R—²›ºSæÄVÇÐ Ù“£'0fæf)^žS"p¦)³&ËΚ5ë@ ¼“oÕªU•yóæíâ Â)§ÌbãÞ±cÇ=ö…Ê]®´ˆ€D‚€î™£®{Aæ8IªÐxšÊÎ(m[!œ1ëi{›ö8Oæ¹õð=îä×FðÝéi-w®ÇwÃ3q¢MÄqs.˜RÖ›Ð[‘©‹ãçi¾ÿÙ–:qȽiŽd—!kέ#üÿ0ýÞh"œ~íÙ¦hm§óÃó[8€l,Ç`ÎÒ[Ð9€úNÈ ®OYmÒKH#¼†®§(«Ž¬3±ÿ`»¡xtCû¿ã€úœõŸÃ–òlñÓ™~nDð~ÚwvO5§m€=C‘ëMðŽñ´&}áÏp8‹¾?Açì}^›Ho <€}fçsº^… ÷—.]º ß_Ï&½˜q_‚L*í¿¥þ ˜ü—~ÇS÷z—ÑÏ|ÚŽ ¿‚üosŽ™øfÂO„éoí? °;×8ÚÊ(ì´}èï¶ñÑ¿9bí]Šcî/Œã>Î÷”Ç‘~ ™aÔ½Åùû/rû°íQÚw¤îÎQ=ÚÜ„l:ö2LäýG(žœË3ƒW^öyÍ´iÓî¢sßD_¿ù•‘pôÁó.ìyúR<þ¯’þ€x$×ÂÇÈ­¤|r¯ ëjê&2†ªœƒ"„]œ»ZÔïvóffî Ȇºî· ÿz^¢%üŸm'¯Cò…@Ñ|éEˆ€Zî/IY¤9ØrÓAiýÛòìpJ“á À±`J§.'c2Ál:è 4¹pJ«Ÿ?þN¾8¥qPZ¹Ù(¥‘Ð!" rò¹©{îÑp ˆ‚A§Ší‰n³õJÚ¹­öíEÞ§ŠÍÜÌ÷§îzwçËœR“ùìZLº7u¯ÅÇÇC0gÏÊ:áø‰#îŒ3kˆm'tÍ5×ü Ïáp²¥+G©³Å“ö6‹’²6ÈÄye³6AG ý®£ÞVyÒÏbëê?¡ çV 8S|ªÊ‹q®«T©R5sÈá(3‡çNäß°Kè¾™"äPþ¤OùúœGù4Â:;7³ÛäGxµÇžµvޱi5éqŽ1¤ÿLz¬{êÌÉ=žÐÓ®ê:aßÓµjÕÚ™ð6é­8.ÏŃvét¤ãê¼Îž=»ò6iâ(lÒ8(Å\Ï£–,Y² ¹°§çr8v›q.v539ÊïgFëHäR9ß"{ˆÙ³U¸ž½A¸fSy#Ó›¦é®{ÓgõövíOèKÊÓHô7ŸÈI™O Õˆ€ˆ€ˆ€ˆ€ˆ€ˆ@ö T®\Ù^`¸Œð3šÿ¸51ë°ù­ŽSÅçÈÙæ–qÒ8~ÌÉã=pÆ$Ìòæ]Ðm/Á¹Œ¸.á0Ž›™é±Tpz}êÇpQ ÈoñõkMÌy´ý¶üÚÒ¿¼?<Óÿ~ŠÒm½f¶X“·GÚäSXìÕqº4ã¿îñÁÉf?ÁéšL¼„Ö ÐYÌÑ‚S˽l~?6Äñ2Ê™‚Ìd¶HÚ¶gÏž'm?wòçR¾ÔikŽTl´‹6¾­„t?¬ûd:m°m}ع zäGÆ\[¼vY'ôiãöÆGŸŸ1… )«ÉõOÚ¶fZí\ ä/!´ Ãê´G0žÖ'öøûÌÊye,[}=DÏVgÒúŽPgu”—`¦ígÌøÜÅ9OC,Ö×c6Ñ4Ýuoúì ½ÿät‰þŠ@þ{áæ êED@D@D@D@D@D@˜1cÆ…M˜åõ­[šY}æ$«fK­ܖAÙƒé4'œBÚìÆ‰u/z+X¨ÂÁ¬´«p6íE®ÛpÌ$á$êfu,w½Ž¨D \¼½<¦—ã|äMÈãlŸIf¬Ù õ8Íl¿@sÙKIžÁqxˆ¬Íj+gåÎcÓö>ü™Y¶œØƒ³´>QÊ–;2Å8ÌfãR›qð|Gûò„¡>ƒímÊ£o-ºÞD¶¿-ûÆé4ú‘”?â“óø–÷ ïíg©-M€™x_92Å8mIðp¬ß¡{=ío'ooå{³ÇÕÀ^\ó c›ËRê(ŸNިᎷéû$mÖ~@0'ØDßìէȯÁ>{ÁÏE„Qáùê~¥ïoÑi{RþÌÛ´½m‚Ùq0¯D÷@f‘®d¹úzlð;e™)9ŠaÏ&êì:ÙÁÌÜÁv^I÷à|ßÍØ~ÄÙlû•ŽbÌ«(›6éxPž©#ÜyåšýÝÂÙÎ}–Û¯’FïàX_Ž…èº°ŒqÔó)›C:ÉÞîæÁuŸe;Ô@D@D@D@D@D@D@D@ §óÚ`– WÊj6«Î™MاUºeãÈ—êÖ­[±@YËûf,†]n¬SFqYC8{p¶ 6§¿P±ét–Ï»eÌ>Âî²Pigϲ,üX•X ïmÎîÜà¬OëØÆåÛ é­ZµªbÌ+Bñ” •u^q eK(]åví¢¿L`¹åÝ×u oò!¯û`ºT&" " " " " " " ……@ž;) ¨Â0ÇIYÆ¢1ˆ€ä=ÿ´ç¼ïJ=ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ä –Ob¹qº=Dceü§ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@tÐLÊèÿ½ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Dœ€œ”?2@D@D@D@D@D@D@D@D@b›€œ”±}þ5zˆ89)#~ d€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ä69)cûükô" " " " " " " " "qrRFüȈmrRÆöù×èE@D@D@D@D@D@D@D@D â䤌ø)" " " " " " " " "ÛŠÇöð5z‚@ I“&­Nž<9zÅŠ—6jÔh6#= ”íÈ_qâĉS+W®œJ&ZÊ[¶lyÖ¡C‡^ÞEŠÙS¬X±ÞK—.]-öɈ4Ý"}Ô¿ˆ€ˆ€ˆ€äͤÌÎêED —”,Yrô©S§^§å}8üj…“‰–ºÃ‡¿Š-Ê—/ŸP´hÑÇŽ?þi›6mJE‹}²CD@¢‰€îÑt6d‹ˆ€ˆ€ˆ€ä.ͤÌ]žÒ&"K6lx=ª*0‹òCG-N½[qæ'?ºqãÆÝqX#”#ÿ޾¾û÷ïïJ¾¡õ§Š/þá±cÇž'-2¥}rwÌ;w?³2¿ |eOÊžaö¥9 =¾™;éO$û1ºÿN›Ãèl=/R–€#t6¶ô]¶lYеqdÓî>'ïŠ_fè2WÞ’ uÑmcšÊ¸·3†V¤?'è˜$ {€î1yákÐ" " "ã4“2Æ/ _¢‘@³fÍÌ8–0' 9+Û;vRV`›mˆ³ðUê»–(Q¢õg8pàž¸¸¸÷IIù²eËN>zôèýÈŸKY#–-‰/Æ x3±‡òzèëìudÿBxã3š6mz6³1?¤n<³v.&NLMMíK]eÚLA~ºÎGþ r§9°+¹µ6©nAÆp&2%qŒîrÊék;¡ª“W," ±F@÷Ýbíš×xE@D@D@NÐLJ] " žqãÆyûí·ï8þÚ›ƒçÝd³ çà8wÝÝö•.]úÎÆb8›â¤ü‰pýUW]udàÀ'‘?JûT›ùؼyó‘y}Áùx=먫îè"ý,³×_C»Tœœ5˜yiÈË—/ÃäZ´hq˰« k³4×$$$L´òÍ›7Ûòì™$¶¼s`÷:ÒÃ|¨øÈ‘#•©;à®G¿å˹˔X" {@dïÑö –®}UD@D@b€œ”±~hü"œrs^ýõ•Ì~×]wmˆ4œŠõq&®pìÀ®%8ïÒ8)g̘q„åÚ=(΋g^@~ÆgŸ}öm69í,¶Y8Gà€lKlNJ þÓð¢š_]òûÑGþ\d–:å‹-J&L]¨o˜””´Ë©C΃#´æâÅ‹·:eôÕ’òÇœ¼_–†Ïwòô‚\y'ï‹+ÿP¦¬ˆ€Ä Ý"s;vl=Ø?Êw‚†\l—ÄÌ§Š€ˆ€ˆ€D -÷ŽšS!CD rp¼• ÜÉÃÉ:œ•_{íµ "gǃ3ïgúÿƒË†Ú®´?ÉRìYÌZ¬OíáǃÕ¥/cr Ž@Tm‹¬í/¹€PÄ‘cÆÎI'íŠ#}Ž“g‹ÉjìQyzöf3ó²‚Ê•+WÃí ´68·"÷I`€±ß‘ir ,ØCÙQœšþ™×!l±z" "‹tÈß{€ÝóíÞoß컡D,^w³ˆ€ˆ€ˆ@ä h&eäÏ,¨!ÀƒI1Œ¹çÚ-<°L!?¬_¿~þ…ùe(¨ p.dyv-–uÛ‹dºömŽC–K‡ƒï8—2Ëñì¾Ã'wÛ½K¦)«AÙ ,ÝÞÈ²íª´¹’²ñúòsi?Ýuн™ºþ<¼'þò!ØUŸåãëq\va¯Ê¡ì-y¡ïÅ7^5Ì–L"á]*î-ó[&£ó~–©?1eÊ”?!W¥J•ïÃ4Q•ˆ€jºäÏ=çdSîAs1uæ>äÿñ®P_\œˆ€ˆ€ˆ@T“2ªOŒÈð=¬ØÛ°¯å!f6ñPœ•sòË€+qBÄQ¹'àA¢ü˳p:nlj8Œü"b{!ÍY<ØþÙê‰çáT´—àØÒégÏpœ˜wóûÌ›NÞf_†|x_°sÀ©y+V¬¸¼E‹Uyëñ+èhI»8:7S÷ u¬ùˆì­ÈiŽâÅ‹×^ºtéÏN!Άì“3‘vç:eŠE Vð?s”±¾É²îálf¯½¢båÄkœ" " 1OGå·@¸•—ô=É2ðGI7Œy( " " "wRâ\´ jê—(Q¢ý¢E‹’›4iR gá’’’Fà0|°[·n^É7à ù1ÎËêFªAƒ§x‰ÈÙGŽ™cå]Úß¾páÂTÚ7¢ý,ô&/_¾|žÉâ€y$11ñŸ–vŽI“&¥ùµøøñãkãââ®wê‹@,àÚo{ûí·ï¥1k¬" " " ¿ðýHy׸qãÎü½T)È?uR^vÙeåq2ö*]ºtùóçï´a/[¶,…ÙÝI^lyÇ™ÈLÇ8ýyÊ=8";"²gä`“µƒö+(ï„sÏ鯓ò¤£Ç) Œqt&¢$åhÿ¿$ŸÄ¹iK`.&žŽçÎÅ‹ l§¼rP†³¨1ˆ€ˆ€ˆ@Î è;AÎJƒˆ€ˆ€ˆ@öDÔI‰ƒ²!NÀ­ŽƒÒÂÊ•+!m!챫…pZ.r—ÑG#½2’«Xêý“·˜²RÌÀ¬kiä«â˜¼ƒ²Þ”­%?óرcݨzÇêuˆ€ˆ@.¸ =—gA—Í_y‰Š€ˆ€D/Ý¢÷ÜÈ2ˆ¨“’ñV#ü–ÝqãH´ö霔Aô5Á¡YÃ)Çéx’t'¥SçŠ?aV¦½ÝØöµœI_ –Ö!" ¹D zÞ#ÄgAßVdÿHØŸ…6ˆ>ºDß9‘E" " " &Q'%K²¿g‰õ9 p"aoÉZ̈ÜXçÎã8üçc=w™¥›7o^±dÉ’GçÎë}GÎ^¤cK¹³rlw„i€tœ“W," ¹@àatÄOáOóL(û ™vOM¢„‡:D@D@ .Ý å" " " yD héÍ”Ú:uê¬C°8oônânÀÒìÎ8׳ewy`gæ×”]Ö¡C‡’î:Þöýâþýûm†R¶“§²ÝX E@D <s6>boêjM°_@2 ö!Ù›Àñá|oJD@D@ "Ý âY“Í" " " yN ¢NJ^fsg࣌r3'm´8(à||†ä;ì¹ÏÊB¼±ûcê¶ïܹs´½„§M›6ÅÑÓ7£ãåPíT." &0‚_VÊÚ]Vާ®È;D¯d¥dE@D@¢Š€îQu:dŒˆ€ˆ€ˆ@´ˆ¨“Ò ° {Ñ'¼ æsfTþ‚sñSœŒŸ•(QÂf …=ìÝ¥J•º¡ê‡Þššú z¤}o^¾3+lcUŠ@$0räÈ9˜m³| 6ƒ?ßÏI¬“Åk¥gðé6­ˆ ú5ÅÑK\bž@AÿŸ—ý¿nÇä=À÷ÆãÄ1ÿ-" " " éIWÁfAVâe5)Ù1aàÀEÙƒ²aovÚ«D3qãÆ9|øð=Å+ÔôÔùcÓh6U¶…!À0žÅ3Þö”Iùų¹²adCUÙS~{ÂêRe<­¯ëç‰+aï^(8Çú¯ç{6|³À ŽªûOÁ!(Kc˜À©z¶ôÔ¿È~£ÐQ Äú= ®xQOêöuž¥_ÎðÑóÊçè3;J3Õžêž'´>|Ðsäà~ÏuwùæVZe8¦¿3ÌqRke¢DsPê]ç$+ÖèàñØ=ààÁ³‚M²" " " 1D â˽cˆµ†*"ÃŽÚïùtìSžF0¸)‡. }_‚©c=›´÷~ëˆfºDóÙ‘m" " " ÑB@NÊh9²CD P˜õþ?=ûvÿêÁ(scÛè©Êòñîï9yÒ&’ëˆVºD뙑]" " " ÑD ª–{GÙ’ŽÀ”\œ®T" ™"ðõ‚O=ñH6Ì”tÆB¹‹0ôÇUžWéùã¥m3n]—G—9QiÍj¬ú-J,Ó= JN„Ì(˜tHwÞtH‡$]A4ÝÒ§È wR6lØp@ݺuŸåMÝGIoby3÷·y1ؼÒÉ[É›°úxìþ9é=ÛÑsz~ʉžÔܘÎ;µ·‘cOmÊ^£Ìfb¾KðçI c©óoCt;ãèEz!¶?Šíó­.[r¨_só¸º*\ø ðt¹{˜gôß®ö¼ÌÐþžƒá­£­éh~uOOâÿkšMmªÏ“ˆâÏrçºd™ˆÀïtø…/¥{@:$*ˆè‹sŠ+v‚¸¸¸+qÀ¥XçÜ”_AÒÞ ñZ‡Jâ´¬Lùs:/^ü|Êâˆ|”8̓2‘ò×ù"8„p5NÍ[iWÏ„¨»tot_O¸‘º8 [É ßýב5'æ ôyFfû5ç g:.$ÞqäÈ‘7¬pÚ´iwý•ò{ ·’î5uêÔÞÄö²‹·‘M"\Jÿå)ªbåË=½©Ón¥~•/ÿ_ìÿÅU§¤ˆ@!Pï‚Ë<¶èäy{wåÀfsp–(–çº>ƒs EME@D@ò“€îùI[}‰€ˆ€ˆ€DuRÆÇÇï5hÌ:LÁ wÊÒÄÙ%˜´|ùòwÉþ¶cÇŽDœ{]I¯IHH˜X§N8é#ß‘æÀéבö_ãðœLøŽJïlHÂØ›è5úü†°’ôÊ:{ÒÏÒçf/~BA*ŽÓ™í×ÐïñR¥J=‰Ž-´ûú:´oß¾,ñŸ©˘S7ôxBÏ–-[žEÜY›µ¹™öÉ{Š+N!qÓ¦M϶%ñ^[¢D‰IVɸž]¼xñ¯ þˆ€8æXE@D@D@ ˆ.÷ §m³fN¿SÌdÜK\G_<¡aRR’òåžæÍ›×Äaç•÷鲑+\z—:iÚ'Œ[ núÍq¹ÜÒvàøüõtÊûw?uq„xBfúµFß±¼;Õ8$¿gYöÁ½{÷Ö¤}³?Y¹ïXHY/fZÚ Ï­8.·[¹97ï6KÏš5ëí§át½{¤èG[:nu:b›Àú¯ç{¦¿3,¶!‚Ñת±gÜ+=6ͺ~ÆcëmΨ\ów×¶y-Ø5¬CD {tÈ·hk¥{@´Ù#" " "-¢ÎIÉrí“pp(î¡l6³ý³'Û´iSnîܹûݲæ Äx›SFþ|òÞ,éÝ„¡8Ç[-#?tèÐ o%rÒ¯OG5GW³fÍj’.‹Ns|¦ÿx‰Õã„=›613r+ŽÊjÌ–¬°téÒ}8\K=z´²ÉøŽëKXO›<¥C<¾Yà BQ8Ø&¸da(C‘Ýaò8(?{wxZJTD 0Ð= 0œÅßÇ {Àï,”#ÑåÞ“&M2'áу– w:pÔÍ&\CÏ;éÈ^Ž“ššº Ge'+Ë­g!×Âöš´ý$ÑéÞ×Ñ^ŽÓË–`[_¼Q|/ì”ýšt›Ã±¡¥?nK¼—²Œû7£fûMæ„4Ç*i[º¾ÔfF’NÂÙÍÚ;vÌöÃ,ai;ªT©òõÓþj–žO>]ê}‰Î%Œí '¯8¦a´ …‡Á£38¡ 2y œw£[ç_…ä:ÈäÈ%&"à# ÏÿÂóùoçR÷ýk‹€ˆ€ˆ€ˆ@ˆ:)}¶ÌaYs³Ï °ÍŸeåWdÇù· Ýj{pÞõa&åq¿‰ùóçï¤üQô™SÏ–}ÿBþ¨É°œ{Ѿݻwof)õw8ËlbRÈ#³ýú¬Ã®aßZò}XâÝ×ÊqœƆbÌ’Ü„cÕ–nïHLLluÈÜ€ ÑÆÊïGn‹•Û1cÆŒ#D³[-ZäŒb/‘INN>“=½o”··{ãī˒îÙVDŽʛÈÿgcGÖf3²ÔúTfúsÚdÔ¯#gq«V­ª˜³Ô]fi[Ösñ{h ¬ÃîJÁÆ„3õ—³Ï»m”(Ú2Š?ea$ÿCÖûù–…6ˆNºDçy‘UyOÀÞ0(ï»Q" " @T8)s 3ËàÔû}c æ ¼Çàý8§æVù¡çêÅ8Wv,û¾Ð7«2?ºV" " " " " "—ä¤ÌKºÒ-" ˜@4,÷Î5|ìy'ec&,ݹ 9(}0l¦èf–ƒ_%¥ˆ"È!›I©CD@D@Ò(T3)ÓN" " " " " " " " " QO@Nʨ?E2PD@D@D@D@D@D@D@D@ 79) ÷ùÕèD@D@D@D@D@D@D@D@D ê ÈIõ§HŠ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@á& 'eá>¿ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D=9)£þÉ`5LýIDAT@(Üä¤,ÜçW£¨' 'eÔŸ"(" " " " " " " " …›€œ”…ûüjt" " " " " " " " "õ䤌úS$E@D@D@D@D@D ÐØThF¢ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@”øÿŸž5ä}QIEND®B`‚open2c-bioframe-4fe9b25/docs/figs/closest3.png000066400000000000000000001272661477525772300212720ustar00rootroot00000000000000‰PNG  IHDR)Iw´¨ZsRGB®ÎéDeXIfMM*‡i  ) Iv´AP@IDATxì |TÕÙ‡'+dW!A)nX•%l¡ÁE@K] JݵT\?7EÀ±¨(Z­Zk«"Q aUDAE%€,5 ! ùžw˜›N†d&ËdÿŸßïpö÷¼ç¹3áæŸsîu¹D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D N¸²N¯N‹¨3BëÌJ´_±¾*‹€ˆ€ˆ€ˆ€ˆ€ˆ@M$ ‘²&^ùT£tïÞ=¡k×®Ÿ™S¤S‰ùsþgwéÒ¥Ÿ¿>jøðÿe•D Aƒ3²³³ üõËÏÏ2×_µ‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ü€DÊÿ±PN °r(…‰G:thŽÓ€@yYhhhåݺuYPP0™Ø˜òG111×eee §|±íááásrssŸ |}zú]•œœœÅŽÌ¨•ºûˆˆ“Ö¬Yó,©Ëvo2ïÚã(ÎÅöíŒÉÆf_꟢.!t¾\·råÊ £ " " " " " " " µ•€Ž{×Ö+'¿+@=L|ø " ‰•ýɨk‰pØ"111 ±ðYÚ‡GFFžHûÑûöí»1""âŸä?¡þ¡èèè7+œz„Ê-é^M[{b—´´´Ÿ-"¦n ßñ={ö<Öé«TD@D@D@D@D@D@D@j#‰”µñªÉçJ%€(¹ ~ã5Éñ^ùÂ,G±?`dG*ˆ•³ =„ÉY‰˜ íG_{¾äRbˆÓ¡ñ“÷J÷?Á)óÊÖ<£ò|ìüB\ÄÏ£œØ¸qã¶ìÞÜîôU*" " " " " " " µ‘€DÊÚxÕäs¥@P\ÊŽÅ^<ò8ž=N~˜ï„&æää¤Ùs"m×ãˆQž~ûc/ÓqQ×–ä=ŽnoêÕ«—=ÏòÊ^X•L¿®ØvvfÞÂŽÌêÏÆ/Fíå:ÃxVåJóÑÊ " " " " " " " "P[ H¤¬­WN~W+V¬A¨œÀ.È5ˆ€ß1Ñ" ¢ã 'Ó–‚˜¸†tcì‘.ÒOI£þ.Òiô›Ä›¼“y‰Î[”ߣìÉ=¿¤á~âzl¬£ÿo‰O²{òsêÆã×gÔ¯e潈 ×òìK{Û¸‚ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@]#€Ñ»wï˜@ëJHHháÛÇÞþ=bÄ÷³'C°ÕÜ·O ²ÍO<Ú·ŸÙeå1¾õ*‹€ˆ@1(¦NU" " " " " " " " " "Pe$RVjM$" " " " "P:î]z+" " " " " " " " "Pa)+ŒPD@D@D@D@D@D@D@D@D@*B@"eEèi¬ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@… H¤¬0B¨‰”¡§±õ™@Dl{AvOæD@D@D@D@D@D@D@D òH¤¬<¶²\7 ij¬eĉA^žÙ3»f_AD@D@D@D@D@D@D@ꉔõêrk± ÐŽ±¯S‰qÄ Ä`†¯1fv;Ícó)ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€+“‰ˆûˆ£‰•̮ٷyl>›×æWòx ¼5ND@D@D@D@D@D@D ú „áÂuÄÿ_!G¬Š`óØ|6¯Ío~˜?Uš Û¤J&Ò$" UA@"eUPÖ" " " " " " "P úcóKbñbbu›×æ7?Ìó«ÒCáó>úö GxûÄJŸLˆ€T6‰”•MXöE@D@D@D@D@‚B $(VdDêSXÆcÄÄ<â³Ä·ˆÕ†ãÀÄpâBâÄ`?“‡CÔyëÑEOq…¸òùñïЂGö½=ÔDRÚGÀDʉµÏmy," " " " "PßH¤¬oW\ë-‰@ ”Ô¡ÕçàËyÄ%•áS¡HYh<¤€ó‘H'˜3tEaµ2" µ€DÊÚp•䣈€ˆ€ˆ€ˆ€ˆ€{g–0ˆ€ü΄³“2—¼í¤œ[à Ç›ˆU²“òÈõ„pÞü"ö–^5tÞ¢ðЇ³Þ²øÈ~ªòÐNÊòqÓ¨ºMÀžýø8ñ4â§ÄÛˆkˆUì™”Oû¿"ÞNü áàùíBCò†¸B¿ =dojÈw¹^.(pµ÷g4$Ä•6yÿÜ‹øë§6j' ”Õ~ 䀈€ˆ€ˆ€ˆ€ˆ@iØÎ,¢> xñjâƒÄUÄ׈ã‰Ûˆ•ìíÞ“‰#‰éÄë‰/Ñ].(yXä“öòïClq¬Ž€ˆÙ³  ~£!ó^9䪤¤·oÕá‹æ¨ý$RÖþk¨TÝž'þ“x7ñVâÅDÛa9•ôŒØŒ&ÞE´“¡Ä)ÄGˆ™ÄÂ`;(M  +pÝêú¢°!Hx'¥+dyHhèö“2)HóÊŒˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@ý% ‘²þ^{­¼tL ´”³ˆ&ÞK¼†øÄ׈Á £0dâgkâÄqÄ­Ä#‚ñ¶”&PfÍ–|D‡ VðâØ¶h†„,  œ5÷¢+8†‹€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@!‰”…(”¿L0¼œ8ƒhω<…Ìp2ÆÒˆö’œömÞîâZà s=¬·{ó’Ë–ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€C@"¥CB©”Ž€ ˆ½‰¥ë^ê^ÐÓÞ(^sBˆ+y2‰sç“÷ÍúeÍqLžˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Ô5)ëÚÕzªŠ@°Å`Û+7vMä¹—/FF¸¦ìMÂó/D@D@D@D@D@D@D@D r H¤¬\¾².µŽ@WA¿_ç ý5»Öy.‡E@D@D@D@D@D@D@j+{ƒp•†.]º]Þ Bâãã*ïxLà×yÃ~ ÜK=D@D@D@D@D@D@D@D xªd'¥‰‹Ýºu»·/'߸k×®9¤ó;tèpçŽ;dggï-nI!!!Ÿ®^½úw½zõjyðàÁg°Ñ‡qù[i{†¶Wmå·Hì…#EBxxøñ+V¬ØæT2¾ã_eÜIN]mHYß“ø™±fÍšIäw°ö~¬áÛÚà»|@ªD¤Dœ####û§¤¤léÞ½û1ùùùÿNKK›ŠØvëˆ#Ü~Pîˆ8ñ²9~ê©§„……µÊÉÉYúãÿ´lÙ²LÆweüØÝ²jÕªO­/ÂÝ]qqq[Þ IIIùN^i½!Л•þ® «µÏÏÒ2ôWW ¨t‘²wïÞ1ˆŒW6lذí’%Kv™ÿ+W®Ì`GàH²gXÙ9ÊŸ——WX¦Þ…y!]~DŒ|ÐúZ`üjê!`þr¸Æ-Rrì8uÅ¥ˆ áìä|Št$ÂæˆŸÄÞFëKýÔ#ÛŽø-ö¯·¹ð«#~Ù®ÍÓ¬žšf‡ærò…¡5 ‘õyÆ_L坨~öQÖÙ™ò픳H/%®bΛ:ôùˆÓÏvJ–8¿µ`Ð;OÑ‹ýEؽÎÃö.ê"¨»ÞbæØâÆ×Áº(Öôbû2¬m;}mg­]j Pé"%e„²íŽ@é¬ál'y‹~"\W:|æÛ Ñ2Å»Ž9º"Úvêì>CH\甽R3ؕٙ#äSÙ‘9…òpÄİñ ãú1gŸµ=DÛ¤“Iß=æ˜cÎÙ½{÷u”Ÿ¥|&±0lÞ¼ÙÄÉN5êxàÀVØJíÙ³ç\ÄÍ(ì¢í>lv'?—ñ+@­.ƒò ðlzzúq%Í_8‰W›Ó>þŽ%~„ÍGˆ&°ÞÉ<-IG¯gáêK¸“…¶ŸÏ?=K±âÏésžËu,ÉâDj P/Îiͺö”wmn­‰¥y‘‡ €W9ÁνK³˜y÷±sqbjjêvÄ=ÛÍx¢õ‰‰‰É Üñsæ>æ\CµûØ9b`åS322Ž4hÐŒˆˆˆ^6Æ;0¯uk@yFãÆ¿AÐlÍß[Ææ0çdLo"ÿUlx\ùÛ¥ÉÌftö7¿÷;׿ææn£íOØ ³¶ ÜI¹ÙõóçÏÿŒÝ‘¬Þ;ðÍ·èo›øÞÌÌÌÜñË/¿Ü‡áÖ‡±Þsî£êk«·À˜b¸¿ù÷,ú/6Û»pÄüg‹ˆ²°s<\L¬s!bþXtD/MmàrEO*ã2 3—Ë®Ó3eZíÝ,½o1N(ŠAø Tû÷Iˆ€ˆ€ˆ€ˆ€ˆ€ˆ€T/·ˆV™.°Ëï›M›6Ùs »#®tæB ŒÈöož÷Ø’cÙ{zß”>_Pw G¢,\¸0Çiç¨öSˆ‰1”‡8u¥Iò×qòr꯵cØÙ^µÿ~;æ=Õúrd}"dÿmÛ¶µF ¼13©OŸ>Í—.]ú‹cË^ò³gÏž{ñëî}ûö ¡ÏãYYYß1ß:bžÓÏRÊ&, þæ/ÒÑSÀ†Í½¦…»'M´EìÌ‚µ £õé¥A=`qùÍüc-K@ tÙÃNǸ\ $WK·iª/íÚËîsµ?®•«Ó€Á5Ã)y!å ðÝK\߯[ZŽ‘"" " " " " "P×TºHÉËl"šÙ³_å­Üpü8 òTD<ÛôöŠ?Ò`ÇÅÅÍEä¼y×®]3x ϵ>€€8˜ñ— Ä ´>Á쎣¯ÓæîÀË«È ¥Ï Ò1Þ^ÌÃæ¾Ò…óa„µ/">d/õáw°Æ·ñïtü;¢®am38—rk9iop2eýQ’wˆ¥y¼Ýª'ü:o˜Û?(/¼b|õ8¡YE Þ{e²DÊ p” ¨ B«bìö{’yæ±3ñCˈkï à½Ï³íY€~ƒ½±;**êR:µÉÎÎþ!n'vneühÁü.[ãkØ<ÿV 0®!¿ÑæäøtCvWÞCy,mŸ!ÚQí‡RRRÒ}Ìÿ>‡èó ñ[Ú"¢££_÷éã¯XâüÅ ‚éçÔggçgø»&÷2ÿµì¤,²k³¸±u¬Î^@Ô}"ÿD—sa¦r>AäË`/z¸œf4LD@D@D@D@D@D@D@D œLŸ©ÒÀŽ¿cØ­˜QžI'L˜Šw±Òvº™^xá/ÌuıpŽx7 Ïô'²“1Š—çDÚ!ZÒúýÍ_ܘ#F„mÙ²¥Iy™g³ÕÙ3I7òú÷6ö6¢Š~˜ïÂÆ,—Ë®»½SÇ^œT“CÁ€Qwk'eM¾Bò- ÛI¹ðÕG¬_E¿¾çªÇìÑ»ëñúµtZB@¿Ö’ UÝ<ŸÎ¨f¿®aþ‘‹ø¡²ÂÁŒjv~r¹¾!¹‘xijC©«)!Y"eM¹ò£¼¼DÊÄòÚ¨gãÖ²Þ=e\³DÊ2Swê!PéϤ¬žeiÖ* `erÌãwŠö´vñÛ£ôGÑÕTOÎ{ŸD²¸ô#ÕSD ‚’+8¾¾ Od¡ŸÔ—Åj" " " " " õ‹€DÊúu½ƒ¹ZÛÑ“Lƒå°uΗë¾1ÐZZѰ/6ò=ÉuÄ#Žün®ÿ&×/䄇@bpÌÔy+ösWAD@D@D@D@D@ê$‰”uò²VÉ¢ìÈauïèù.xÐåê6”LT—=•ñÛñ¾‚ljÍi¸ˆ@é T÷Ï’Ò{ªž" " " " " " •B€׿ÀÛ·§ª‰+çÅ9 øö™ùVQ?»uëÖšxSM\g|²gFÞŽ°èzº‚í!”#+²‚<5\D@D@D@D@D@D@D@ÊB ^Š” 4˜QPPPQ]«,œËÕ·¢~²Æ~‡P®ÉkÏ %¸:o:ÿü\ŸoglžËµ›Ä^ò­ " " " " " " " "P…ªä¸7»‡åççÛF›‡††>‰xvþêÕ«Ï# a§ßݤ¶Û/„¶™+W®œRÀ.¨•úûˆˆ“Ö¬Yó,©Ëv"¾ÝB{?ŠŸ æ]Ÿ’’’Ž­;¬¶!$ˆO„……}EÙDÉ]äoÅ~jvvöeÌ…&åšÑ¥K{Kõlb"q}î¥Ïä‹úÝ…_×a'“±3V­ZõÒ„ BçÏŸ=õ×Rߊ³ü0õ‡z÷îÝ–yn¥m$mé´Ý‚ÿ‹ñý·°¸…ú–ÔЬY³.ç‘çÔ²ë(|CêÞ~úãAÛÌ1ŽAíˆß²†ë#""v0þ1ÊGÑþ*¼GÁ§/öŸ¢.–ù±ŽëXkõݨŸ…Áz STi¸+ÓåôˆËþx9¦µgZ.=<Îf”ÃDµ ùî‹%.{;²‚ÔVöV#Pé"%¢\¢Üóˆb72ß7ˆa'mf“Óv9âÚhD5{¤`ý^D/[D~%õ'2fqc:R÷Báë’M<¸€öÛÉß–““ó(e³9€º–Äkß2¦u‘~LÝ@ò#Èÿ…4›Ö/—¼‹¼ïÍAÔ;3//ï÷ø0“r‚µ9‘ïRú_Ý‘ØÈ4›½zõúøÝwß5»c¨¿šöêÿ¶`Á;}ü7üú¶¤>žöA´½ÃÚ:R×8’>Si›½wïÞ”_ |é÷Ô™0ëøVè'õÅò osÚžaÛ5™†©¬á¡ ø7‘º‹i;ë7Ÿ~c‰Ñ碉rwÂm…â(uµ-lÄáY/q-n c–Ò{°æ½‡;¯ ±ëPkÂ÷ë–º,*ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@m'PéǽÉ.D8û‚|o¿˜{7¤CMò\ûöí×ןEÝ Rw ?‹ëÙá7ŠL„Ķ’èß@Ý ìžÜb;)_ÐÂ1×;ŒI±]‹äM0|•ü7ô{‡~=­î"¨LÛC©©©ÛøWÆ<š˜˜XD¼¥Ïpêÿa»0m ˆ|C)çRÿGl½`õÌù)ù—‰WØ.JÚésso¥íê7‡mÝ9ÔÝGÛ<„Âþ”¿6>Ô­%ÖV| í111øÓ‡±«"##÷1§qlc»9éÏC×AæÙC›{}llìëíÚµKgÍwS¾èZ¾|ùfæ¯í[ò&æ»\{mÛmYÂÃtf›+C]&¢Û3.kKÁQE1¨+ŸÚò½“Ÿ" " " " " " •D ÒEJü¶€«½ü·kKæÁ´´´Ÿ-Òï!ʽÝüƒö““'Í¢¿‰Š±ôKqê7RÎàhó±VGû§t?m_[10‡|ñ‘rb6"» {ˆuï$''çyÙ°l'úú˜²lÙ²æKxxx¡/ô[Fݱ©æãôûѱC9ÅÚ¬L~;Ñ-ˆ!âÚîÊB>ˆ‰Ë1¾iq<ðõWlœàº677wsü {a¾c©oOìâ°†Çúß³gO·O¾ýkaùg|ž¼J»·ÐÎôÏ>¼P‘??œÕ¿" " " " " " " " UM ÒEJàÇ:; £|šW~7¢ÜŸ²Ø‚ÀÎÀóv„´CNÞ+ÍÀž=oÒ8vmG¢›qô{‹U`ÏW`<ܱ˜ý~elL=ìùîÀÑîß÷ïß?Ú){Ò=ô;Á©‹ïA?ó!ãÔ3÷ɬo3¢¡½€¥ ;*cœ6Rksûˆ­B³¶Bä÷S$[ÄÉËét-k¹±qãÆ­°7û¶»ªH`î_ˆ‹Ö–Ò¿­í -Ò±vfàþÖAüsL)âïèÃÌ„ð²nÀdˆ‚ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@°TºHõ¢Y/{9‹=ǯðrÞ^Žs¥# îڵ륬¬¬‰^íGdá!¶õEXŒµFžý8’äû¥K—þb岄+V˜@õ5¢âÅ6ÿΟIŸ|ì,¦~0ÇÀ£ì(8báËø`Ï–\DýØØúÆäíHõ „V{¶ä6vwþÑì jv$éNÝ*+{Ö³”ú^ô9Îl“æÝ(Ïø¶ôYgGÎm(¾]F9Â3n?©[pÅ®ùz¶Ç{è°ÌÌÌ•6§‰©ÔwñŒ©ÍI6Îf‹êdTà€ÑúÑß®‘=šRAD@D@D@D@D@D@D@D š9þ\>,Y²d»Ç!¾‰};âü1â^›‹Ýö’—WwïÞ½•>;ÑÒ¨¶Ç–ì¨5}§p´ù+DÅØÊfÜE%Üð'|³—òüÅl!úÝbǾ½‡!´>†àøOÔ4沉îçGöéÓg õ¯s¼{31Ÿú丸¸“’’ò°7 ÿ ½5EÛX|ÿ1°‡·m„Ò5è·xiÏDC;žnÏ”,Kx1—Àd¾…“·go^dÂ)éØ=¶vNö—ñ”?#ýŸÌßkMØdþ³`°€I½w~–ŇšÔw1ÎXTÃìíÞˆ`ç8<ÈÿÑ,Ù)[j»Ý”ÞõþòmضS½A س]ž~}Ž1bD¤o'„Ç£Lô­·²ç8úǯ}ûÚz|އûvñ[6ˆ«G쌵:oßð?,˜Üü:¥Fê&ð@u; ùE@D@D@D@D@D 4Šg¥1â¯â[#vì}KŸˆvŒúv+ÞÌñdÛ¹§ " " "PyL¤ôû•Ê›Z–E@D@D@D@D@D ôŽØyWú¡¥ë¹fÍ;ÂÜÞiDË–@Y:vê%" " " " " " " " " " " " µ™€Ž{׿«'ßE@D@D@D@D ¨ô”õˆ¥–*" " " " " " " " "P)ËMCD@D@D@D@D@D@D@D@D@‚G@"eðXÊ’ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@9H¤,4 (J`À€ ŠÖ”¾TPPÒ¿ÿèÒPÏÚJÀ>']ºt‰¨­þËoÊ# ‘²òØÊ²ˆ€ˆ€ÔzJˉ¿ZHzzúÚ®]»þ_ ~¾íŒ¹“¸v÷îÝvïÞ}o{m({Ö°“ôÏ5Åß &ø½ÇëÖ­Û¹øûq@i}61¹´}}û%&&F1×Û|N–…„„,³²oŸª(ãÃSöy&í]óiÒ/}Wõ¨oÖ¬YÓAçç@ë ¾5P?ïö>}ú4ÍÎÎþKLLL‡äää<ï¶Ú”_½zõ£0:º¦øŒ/§-X°`þ\XœO´ßŠà˜H¼†ë[êkƸµ\³Ä¥K—þRœ]uYYY`¾Ÿ˜oˆ¿~•ÝÆµº™u´¯ìyd_D@D@D@D ì$R–™Fˆ€ˆ€ˆ@½"€¸†°ó8‹îG~;;á’{^1ÔϤ®k~~~ éÍT-²z ì–k’™™9“lwb&ã>‰‹‹—””tqã8p)uÖg)»Û\ׯ\¹ò ÚÆ`k$cv—ÒçÊ­3{!fþÊ.@¼n&†Ó–‡8zíòåË¿¦~,u±Ä¡Ô/& %íK|pÕªU/÷ìÙ³áÁƒ§`ó,bsê¿ ÏUgû)û øw%ý煉UÞ˸…ŒïwøÔ¾Æ 1›8vo’ºìˆ;;H_ Û>Øÿ%22ò†”””-|Åcm>å0ÔÖù(vçPõ ¶#¿œÔE[mçZ¾G±¹¹¹×Àò·¾Â°ù“‘‘ñ(ÝLH4öy\“{°ŸyèС'(wâš}ˆ]· ŒÝ›±»’zu%òáz~„“̞ǧŸaçw×,ý†Ò"ñYâåĶÄÅøó(Ÿ‘ø0ç_™³>†1îòvsÉ ñññ§äååMÇîåØÍ`7oWÖú ˆ‘ÄTÖh¬+XO<.#vÁ'[Ëzì^dFi;‰ºÇñ1†b[òÓi{š5̢܉ø&m¶K· m/Ñvy—?þ>[6VAD@D@D@j"¿Gj¢ÃòID@D@D Ê D3ãˆ#&îD0¹»W¯^-Í êÆ þô@<1ÁÏú†}ûö]Cáç–-[vâz¡w€Çë·˜@iãXï=$S×›u›¸þ¼ÕW$ „vdíïÁóø”Àg÷7|Ìæˆ#ÂhK¢m‰€ˆ€ˆ@Í"°a坿BÊ•·Ùwa W.¡ïì… æðŒÄCôŸNÝÀ@ã¼ÛjÞ¶2Í$„§5–G°Ú––v"Óµm§Y «÷„Åž¹ö2·‰”{ˆÎK}1ÿ鈄³çÏŸÿyÛuyº3°¤Ô|ÆÆD«µÖçÜsÏÝC2¼¤þN=bRc#€}luË–-ÛAb‚Ôùž>Ki? ^"^‰8ø«í2õ´•è+£íÈüˆ¨ïÂà„¶8Û}éç7a¾ŽÌ¿©„NvmžZ±bÅOÖŽ ø/DÉ€"]yù”àCa5~ ð"kK·ÏŸç(›Pn¡D>ÖÈõÊEè» >¢Ø[nQÝÚ?«Ì×8ß1ÄçøDÚŽCcŸKðm¹øo¢¬­#1úƒŸ›©ZAŒ#ZðÇÀßgëðhý+" " " 5Œ€Ž{×° "wD@D@D ¦@(ÉóVU"‰Gò“>í–Ü;­/vblÊušú½3ß®]»> ¿û)¤Ç’æ8mR;ªm;Ú¾tú‘øR ü6Ÿ·9c<"èV§\RÊZÛ3¶pýÖÏÃÀŽ ›à»•]‘¿Ý¿ODªssrrV ¬]‚0k;ýúJŸKm‡å9¬ÿEÆ- ÎŽGÛnI;:^çFøå¡ÖÝ;„³ s»Sa‚´“wRÆš_EByù1Rr¡ðˆ6Âx3æÚïéZ"ãËô{6Æ?¿}?#¹´5 ÆÒîŸIíš¼Îs7"žMÛ¥›6mšÂnÇ.ÞŸëWÆ`;9pÆ`7„ëbeò‘¬É|›MjGÌ-<¿i‡³<'!3ÓûzÙŽOç”È ÀgË1­TD@D@D@jí¤¬Q—CΈ€ˆ€ˆ@Í&Àsðš!¬\Ä®¿Jáébޤ޶~{¡/¶³2ÙÊå  0aé·-Z´¸ß³Ër?âŽ[ð d“nÉô‰ŽŽþÜvµ5mÚtƒ FÞãØA×—t¿õ®#ï>vLÛñN="So'ïIMÐkgy„ÇÆ–bûs’Ó`v¢•©oBݰûÄÊØë€Õ„–K•€Íkøèì K¦K±¾Úa|ìÊŽÇï7 añjëKtÊ[˜§b[H¶”¹£<Íß3GGOÞ7ù±ô~ìGZ;ûáã^ÒÿÎuÊ ÎÖÒðq†•5u_ü7Ñõâ»fÀßµäsv&]>çóñ\\\Üûä£a[ä:S÷uçcǽc’²;×6mÚìeìØŽ¦2dË–-M·þ—kŸ›ÎÞuþò\‹/˜g€Ã¦¶ ×Öãâ÷·´çÓÞÌ>“(ï¥Éc­[±ÁŸ-Ç}ŽgC²R¨n)«û h~¨ù~@ÌØ@ü˜Ýl‹wÆ#m0·lfQ¿aåŠÓ-oÇd­ãÙ·!¤ ¡Ï'¯þ|+ÆN¶6úÝÇŽ¿7G¶Ë‹Ž F:ÖÊôoâÕö;gÇ~IžIOOÿ »‹éc/ìI$ÿgk÷˜û^úÆ" îÀîÇ<·/Aëdï1”B¨»Õ»ÁêCÆÙñðµÌcóÚqé1&˜:ý°ý6í£hKƾ½\&‘˄˫`¶€úy¦¦ „3`ç>¶NÿΔ—Ò¶þÿfîß4oÞüu³éÏ×;v´ÂGc½ÜÆ‘Ÿ„­‰Ž/ö|EìN†ïwØ~ö÷yá[`µùè7”þ¾¢]¯q´7c÷àØ]MþK|²gƒº>ÝGfmcw%» ZC >ôÿ”n&¤ÞE~ cm'liÃôviøÓªqãÆîçúãƒølB¦ pËYËBòöâœyiP‘kø#vÀg&sL7‡ÈâözÊö¢·hÕy^¥µ[ÀÖ“øò·Ã¥Àÿzø¼ƒ/ïc7™ñd|¾d‡æA渌ºçiû’¸‚ü3ÙÍYöÇ%~¶»ôE~®½LÉ©S*" " " " " " " •Aà`E°‰èÝ»wLyìÙB¢{wayÆ7ÆvšOŵª³u0¶MqýìÉž]{G4ÛnPv%ÇX;¾{D°±´¹wSú6"¼¶¶¾õVÆŸ¶Î.;ßv¾2×ÑMnê;Æ)ÛJ›×);)ãLd,"Ä:m–Ú:lÅùËØl_\[ >Þs”&Ï<“ˆ7Sb±Ìýñ±¶ÒÌãÛÇ®…]ßz§ »Nø3×)—65>°mf×…ñ;|ÇÙµ²6ßú@å Jül™?ø±Äßg(ÐÜj`8â¯èÁ4.[" " " ÕJÀDÊÂvÕê‰&¯1L(cw§‰l?s4ü>gWlU;ÈâÛãÇÙ¾ó²Cpí65‘’œÛíH»oŸê,#ìMd§ãl|ÜVZ?óëÚÄz~eÌåä¿e'§{Whim»bëÅì¦Ì†¯û}°íËžˆ€ˆ€ˆ€”•€ûy8e¤þ" " " " µ“/!Ú8•ȱüsXAá‹iªz5G·ç‹6÷!/Úê8ý6/^ÚçÛ^ÝeD½2ïPFÔ|›õþŽ5µ%>ÇòÿVëRì¹›Õê€&¨7Ê,¦Ô2Z¨ˆ€ˆ€ˆ€ˆ€ˆ@" çÔ¨Ë!gD@D@D@D@D@D@D@D@D þHYÿ®¹V," " "P x¿¼._K¨áôLÊ~䞈€ˆ€ˆ€ƒ@zzúZ^–òÏ"œ {õÁ¼îd·‚ÛÓÕ½fü™Ås<ÿÀó,½ŸÕy¾}îÏ7ÆÉ¸0.¾‰þúªMD@D@D@ª‹€DÊê"¯yE@D@D@D  ð&ïQ¼ÀekNYë§BÐ{ïèš´Þ >Ž7ƒ?_ŸLÄŒ¿4??ÿ©²ŒS_¨J)«’¶æ*&€È6“]t]¨bHofúEŽ ]ºtiÃ”ûO =1ójÒ“xËö=Ô=N¼ÁÚè·122rxJJJzbbb“ÌÌÌ™Ôw'fÒöI\\ܸ¤¤¤ƒÌ7†ñfsq)mPnÓ+99ùWæ<‰ºÇ©‹¡ÝÞv=-à.Å’æÄ†kÓ¦M)$Ãyó¶[„íÖ­Û©Ø»Z;>]Fòg¢½Q<±öú+V¬éÑ£Çɹ¹¹/áC4õ‘^Bz2ýÆ`ë]Òë8ÆŒiFE|šù^¤~(ù‰Äg‰—ÛÃõQÞ꽑¼‹>v®dló…’š¯slûöíh}¼×b9þüà]ç›/Éß~Å•KòÇúÒV®ëUÜ<ªôLJtÔ&" " " µœâ— n=¾@‹ö^uóL$kÑ¢Å0úu¢í±¶ìÔûù%ÄÛôLt‹%þtðàÁkI]i×üܲeË΃îF¾ÍæÍ›o·6ìÌ´ùÈÚœßPîGº*++«çˆ#ÂÈ'±p<}úFEEÙ1䱈ˆ6·ßPÒœ&ŒbólÞäÀæõÄ…Vfa›#""â<|éFß;l_°¶åË—m¾Ò¾„ú¾­¶Ö1Äß[»¿€èº6Wc³d"6&O˜0!{ó÷!ñ† üF§’ÿ®n!!2йîg|o ƒóWÛ\ðÄN¬oÄ~ck·€‹á5Í"â#‡k]®’üqÚKJýùS‘ëUÒ|ª’h'eIdT/" " " u˜@BBB‹ýû÷ŸŠ@–¸páÂÏRóœ%#¤eg²ãð'«C{‡r‚åÑ.Am㈶Sq:uOÐT(šY?D¸·-E œÄؽiii'Òï8DÂ1Øsegg[s.m&ä}k…’‚¿9 ÿÊŽÈnrrrBû† þf¶òòòDP÷”͉óÙ®Q’g>Êï›àÙ»wïOñ+à±xv…fcïÖ>áÐøE°Ë´!é>Ø îEÛujöÙ±ù~\gyǘ؉ú.;>RÿŒ×Y¾§ý–÷øæ}]6Ñg¹µSÈéçϧOq©?*r½Š›Ku" " " "à€DJtÔ&" " " u”¥ j;SSS8KDü*D]ÖáQÿû—±…¶ÈÎN×·þ×z8W |‡–Kòß"™¯\׫и2" " " "PJ…7¢¥ì¯n" " " " u€Çƒw°Œ£·Ü;íyˆˆRç—ri‹äF[_;âŒÈh;+“­ì/tèÐá[æÈGøj†Ðæ”÷2¦PÀó3>МO2ö/ؾ±Ïž—é„Ådzsôú{¯9óð»p¢Ó±„tõí¬ F…Ç®­È\Os¼;‰5|E9ŠcóÞ÷Ö&‚Úo¯!ºŸqiG¨»wïÞ•Ý“ß1v–=”¶x¢ 1w7>Îöγ,­Ÿà×æÙƒŸím<>D"Gxò%úSšëeëá3tëlâÇ75‰€ˆ€ˆ€ˆ@@%þÅ;àHu¨ñf!Nu#Æ!ªÅ#N=€`5žc¾ÿ¡m4 °g†rü¸5ùM¥Y"àmì|ñCæÏŸß»ë)ï°±a‹hyuM°»Æêh» áí;NMûeøòcMüÛO>‹ãÚWZÞú–üÍicØ ¸ ›¹ØËpvnZ=BàbüxñÀ[I?Ç/{Ñ=3ÒÞx} ;_%ok¸€öqøú¾ÞG;P~›ãéɨއQúôŦQ–uΤþ/̹™òŽG'1hˆg胴 bwçé´­lܸ±‰‘®;v´ÂÞtì˜H¸•¼½ÌÇ^´S¡ÈvˆnÅŸ4æ]ŸQ¬ËŽŸ§øó§4×kË–-vtþ¬sö¦Uh," " " " " " "P' XÓËŽˆ€ˆ€ˆ@" ãÞuèbj)" " " "P<§1•gK¶bÌ™ÞÌ‘ä^Õ!PšÏ»¶cÏÍ}ýGì‹ö­«éeX¾Í‹…öÕt?ƒáB¬½@é~Ò`˜“ :H@ǽëàEÕ’D@D@D@D@D .ð~a]\ŸÖ$" " " " " " " " "Pà H¤¬áHˆ€ˆ€ˆ@0 0 A0ìȆˆ€ˆ€ˆ€ˆ€T‰”•AU6E@D@D@D †HOO_Ë‹rþ¯†¹U#Üá…/µâž˜ë7‹Õì&ýÑ+ž"}ÏdÜÒä@}Õ." " " ÕE@/Ω.òšWD@D@D@ª@XXبððð­U8e­˜ áî´ LÃÙ kƒÃ¼í|ܪU«ž/‹¯«W¯þ<>>þÒüüü§Ê2N}E@D@D@D * H¤¬JÚšKD@D îÝ»'ð6ßüR}âÁTä’¿·¤ô?›_¼ x³ìâ’ú¨^ê3¾G3ykvW¾'1¤7Ãb‘ÃÝumxõHÊýˆ'О‰˜y5éI|ï¡îqâ ÖF¿‘‘‘ÃSRRÒ›dffΤ¾;1“¶OâââÆ%%%d¾1Œ7›»ˆKi»€r«˜˜{sø¯ÌyuSC{[òÓùŽ?M¾Ä€Í4N£ïtouëÖ­/㟦< ?Ò6‘ø,ñrb[âbÖñèÊ•+7’w1§­ûJúç0.”ôQæœCý}ÔÿØŽürRmY´Û£G“sss_¢͘ÇH/!=™.cøyónÏž=òfô)”Ï"6§ý Ú¯¢m?¶N nuÍH£ˆOcóERkù;‰½É¼'íÓI/¦|âcßèèèÌ}ûö ´~Þ5.ÇîÞu¾ysúöõ-3¶X>Ö¶2_/_û*‹€ˆ€ˆ€ˆ@iÔŠ£-¥Yˆúˆ€ˆ€Ô= 4˜Á/ð~Å „—1ü¢\Ý[½V$Á!€8f¢Zˆím•ºy|ÇB[´h1Œ~hûA¬-Bà¿È/!ÞÆîË¡¤±ÄŸå®%u!¤]CòsË–-;<¸ù6›7o¾ÝÚ°3Óæ#ks~C¹骬¬¬ž#FŒ#Ÿ„ 7ž>}£¢¢Îdþ±w6w‰ é·ßLØtáß§$ )…yä?$ÞÀÏŒßãÓ©ä¦Íý³A5Š9ïG$í^Ìybëjú¸; 1s4ÙUæ³EúœKÙµ|ùò¯­Ì¼KßÖ8Œ!þÞÚaqëÈ O lÎ]”ÇZsm‡ÛÕ6ö±1Ù9RNÞ„Ý$l^Iþ† ^Dþ?äû`3’4Ö7b£±ÙµÀº.†×4‹ˆ®õ?§Ó§¸ÔŸò^¯âæQˆ€ˆ€ˆ€" ”©]D@D Ò ð‹¶ýòÿ ñ(~ŸãL˜}¿ôçQžÁΩ‘üâ>™h¿¬„p¢ÇpÊç{Ð^€(0‡OOP¾ˆ> =ý®b÷V¿ÐDý«ÔÙΩFÄIˆ ¶óÊåÙ½9…ö8Šs±};c²m·þØñÈXD„Eør;³2lŒ‚Ôv -öïß*‚]âÂ… s<ë±ï›;ð™Ï&Î\±bÅOVÁ÷ôÊ –ç»r ߇Ñ6Žh»mGà4ŠfÖ‘îmK#""&1voZZÚ‰ô;Îþ¸€=ßqkÎ¥ÍD¾o­Pž€/ø®¾h»¨," " " F@"¥>" " ÕJ1!–_Ö_À‰øÅû{~é6!1ל¢Ü’r®íôA`x–ÝDýˆ›ØmôOvrÝÈ/úO’Ž@ñÇ$ߤíb²Y],›bwBæ%”_ÄΉØE‚hБº7^§_ýæ`ãÄš·±÷2v®³6ÆÌ§~,ñ#D•Gˆãw'QAj=JÍv¦¦¦pÃ÷£ð” Ÿ v”Úøì¦iÒö|ÿvnqWcø^•x_Éß[_¾W­˜ÃD»Ù¤žñÏ36Í“÷—ä1&Ìé€!NÞ“ºnXž?V4£o¡Ø‡Xz)ÏdìÈwýƽˆ(¸€º‰Ö—ºú–è»õq²eË2Éé)G¾§ì"ÿ«µaߎ¼ÛQì!¶ÎP~¶8B°uq‚ÃÀ]ægÐ!üÉrÿ ×Fþs;òî´9iæt†¦%ñÁÿHæ+ïõ*´¯Œˆ€ˆ€ˆ€”†@áhb ‰~@IDATi:«ˆ€ˆ€›Â_~þš_’ßäïµä_òƒã&"„!dÄ#Rð‹üÐNõˆ+“i»¨Ÿƒèx;$M<É`Ì7´µq쑟Æëi·ã¡™ˆ,mú’ßEýlÛ……™#±a8õëccc_o×®]:uwS®/ÖÀOH€Ã;èt4âÖiÖ™?4á;r~À‡;,FtmY;ÆÌwÓvV&[Ù_èС÷̑Ïw³ß9w ¼—1…‚bIã±ÿ_úžhíæ+Éì4ðêï-i3Áñâ»ÖfG–Ù-ݕݓßñÝŸÅwùjªã­Íå-Øí†ˆy”•-ņ=GÒo`îd:Äó W5mÚtvá4‘ö§™/‰º¯èÅ‘ú€÷ÝüLÛ©Ù¾Ñy¶¦_‡ÀâoNÖi»5Û› ˜D"›Èê—Oi®—ñå3t™çš˜I(»‰Sj#€¸Ñ‘_¬W; D,çé‘NÙR;RÊ/Á£¨ŸràÀéô_øþûïÛ®ÉÍÖîle":Nå—ï~¤vlÒâ§_ÒÝÇV=å,ìÙ/éè³ÂéƒP¹…üæF{Ž;þì´ÑÏÅË2ŽEHØîÔ)šN€Ïò,>Ë݈q|†ãù~<Àwa<ÂþhÿölÃPvÛqåM¥YbþmìV|ñC8êÜ»ëøîÞac9R=–ïâÔ5Á®ûûGÛmoŸØ‘iÚ/××»‡îûÉgñÇ…+-oãK Øü7mŸ`³ ¾Ú±êWûØ[éó 6±{útæ^Ù¸qc#];vìhÅC¦3̾ï[ÉÛKkÜ»(­ÝáÀ¸ÉüÌøŽt íMø9s%beu¶³ÛÖwãDZŽ÷X‡=2ÂvMÞKß×ñem_eddØËs¬m#é³ø;{a®Í”7ð³$‰¶!6¶2B 9ÙºÒðu5¾DῇOñǧ4×kË–-öÂ¥ÀÝvšO«ŒµÉ¦ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€T:4øÅÙ½ãÉ&£| åÏ,O:•øåy\Œ¥ü‚OÝ{¤ï{ÊoQåÉÏ%ÿ 6:X™ü߉¹‚_ˆß`×ÐUž~¶Ë-R×–ºéìtÚÔ«W¯–Œ9‡º—}íù”“?Ûí°½•¶[Ø•G:‡ú‡ð«£EÄÆŽ©‡ùåþtv Y»‚Ôz|—.æs~ q=y{yM[Žîl´@¾ îg0êW\;ßÓÿz×ómÏî̳½ë,Ïψu|Ý;2ùŽÚ³‹Œsúó½=äù;UERÚlçf‰9ìØ¹Å2Ïs*íY•E?{ ¨8¢¾H§ Íéi·ŸsG„@||¯—cÀZ>?Qƒ z>NµR(3‰”eF¦" " Á$`â"ä„Ê5ˆ€ûù%Ú-FxÏa¿ó‹ðdêRHí—þ¦´>¤Ÿ¢MØQN{žÜ4~Yž‚ØrÏ˳ÿãÞ£ÜÑú•øÅüKÆÞOûzÒ4úo'Ž¢þgÊãñë3Ò8ÖiÏÑ»VeI$U_ 4hÐ •ïJ+|?“Ï÷fŽH÷â3ž]ká»fǰíw‘À÷;ºHE1|›g̺ߜ]L³ª*‘?+wbþ~ÒJœE¦E@D@D@D@D@D@D Š F”æhdBBB _—ì袽¼Áê9ìÈêB‡ïß²ÍO<Ú·ÞóÒc|ëkIYǽkÉ…’›" " " " " " " " "PW H¤¬«WVë:F ´Ž­GË(†À€S­*¨ôLÊq䄈€ˆ€ˆ€T.ôôôµ<¯õ¥Õ«WO«Ü™*ß:븊G;Lb¦§xâÔÊŸ±øìñ{AN<÷÷žíù.¾îrÅ÷ç`÷S.)…õ´ÝF|ˆÏÎÓ%õS½ˆ€ˆ€ˆ€T”€DÊŠÔx¨ÂÂÂF…‡‡ûfçZà~ËþÆ3d[©¬†ÞÚ>}ú$.]ºô—j˜¾LS"P.ÛyeDgÆ<Ê:x^oYí¨¿ˆ€ˆ€ˆ€" ‘2!µ‹€ˆ€ˆ€ˆ@-&€À4“]s]yA} éÍ,e‘³„¾6ˆW#)÷#ž@{&bæÕ¤'±óîê'Þ`môÛ9<%%%—U5ÉÌÌœI}wb&mŸÄÅÅKJJ:È|co6m×ÞRÚ. Ü*&&ÆÞþ+sžDÝãÔÅÐÞ–üôÒìÐëß¿tFFÆÃô?—qûé ¢«$vìØÑ<''çìµ~Nˆ?·‰_-;߉ø&öþLjdMyä]Œ½™ö•”çRlGy>vcI».açâMÖF—‘Ø|öFóÄãëW¬Xá~=6¶ÿ@ÝÍÄpÆåÑvíòåË¿¦~,u±Ä¡Ô/& %íK|pÕªU/Ó>{G >î`ÎÅ…%dðç¯Øë†-{Ù7ä¯b\n Ý «KâczöìÙ7ÇO!{±9¶¿ðØÝoí " " " "àK@Ϥô%¢²ˆ€«áàùí„Ajˆ ûl{AvOæD xÍÆ 8õðˆDÑÞ–©›gbW‹-†ÑÏĺ¶Ú"zý‹üâmˆd&ðÅBtº–Ôµoß¾kH~nÙ²eçÁƒw#ßfóæÍ·[vfÚ|dmÎo(÷#]•••ÕsĈaä“BCCÇÓ§oTTÔ™Ì?‘ÌæövïÞýc#¢öÂfwòÏ9JògÙ²e;°ß՞ljhv,âá½6Á¶+>ü;7Ð~ ñ7:tèq&ÍW ¾ýÆÓÏ„Ú)ôë dŸ·zò)¦Û6lxžå-Òo¥µ“FrvÿHz?© uCˆ.R,Ç2×yô7aðüyÁÚ,À ‚ïÙfâLÄÔqžúcHÛÀÛÄäø¿±×Òÿ"Oû±Ô›ˆYioem¨ïçiNÄS· ¾FF>æñß®e#b§Í_ŠßÅò±1|VîÃÇ ì&àó©Tí¢<ÖŸ=µ‰€ˆ€ˆ€Ôo)ë÷õ×êE Xaù_7:ï›Æ#Þ9»Øªª#ÏTˈƒ<¥Ù3»f_Aê%„„„W§"P=µpáÂ÷Ž@Ë#pe#*Íd‡ßOM¶sñªã¬ü%´Í¶q&L8DÕtêZ›w@„{ÛÊr“˜gMZZÚ‰ô;qk ‚áìììlÛ˜Ë\&bù ŒœÅŸ½Ö‘²ãs Öîڵ뷈f#™çvv`øŒ_mv¨Ëa—çìÍgÇâfªVÝë$M¢ßTÆLA¸<ñp#u¥Ø^ »­Ä\|aDàÏSÆû&dšðbí¿»átsš lâm «÷„ÅÞ{±g"åbk£œMb» #u…Œ¨·¾Ëˆ¿PçÔå"^^Æœ¢¢!ãZzš%þø bM§ÛçÏŸÿùX+2¨vúK@"eý½öZ¹”Là+,¤  SÞÁC5:7­áEo /¹³ZD RØnÞ׉©D 6ƒ¾Æ˜Ù5û6vA¡~Ø¿CV¼355õ€³rĪÂ{C¥vétÚ®v“´2MíÙa¹Óicœ%/ñ1BÌñ½§O$}sˆ³±÷¼'ŽfžO[%¥Œ‰nÒ¤É÷N;cÝ¢ž•ø³‚öxÆ_Lz/ñ âŒÿ̱ÅÑõÂuR—AŒ°6ÄÅ×Ù)Ù‹þ«ðñÒM›6­´Ý ÖæêÝ}rI©í¾ô´Ão¼Öÿ<¾3qâD÷zT? =‘9ÓIùïøb¬g|IÉ~ìdyGÆz_Ût|xˉ¬Í}ýØQÙ‘#ñv$ü(úÛÚÃY“·¸YÒ|ø—÷¼Öù »`ï/јD@D@D@ê=ÂÑzOBD@Š!PÀ/G®Ø‚Ð7£.š·3êâ·®*¦“ªD ˜b06™ø-ÑŽF>DìH|Ìð*ÆÌ®Ù·yl>›×æWzA€Ýƒ;XèÑì ;ÍlÏuD¤:¿”‹_ÌNÀÑÖ—}¡ˆZ¶³2ÙÊþGª¿eŽ|„´fˆeî@ÙvFÚî?¿~ëx&¥}_M” a΋ÉÚÑd þü±‘W·_`ì%¤G¯\¹Ò9¿Áž¹Ø¦M›½ìƒ¨7šÎ![¶liâ5( ï\§l»S¼ŸÔÁÞ 4øÞ‹AÙ±tüû-Çïï÷ìB5á±PŒõcÓŽ ÿ›8Û'¾ïoŒµÁÑŽ¸Î|ϱSÔúGs-}çÜC½û9|N“w|p;™NñÑÑÑŸÛ:›6mºÁ®Ûᑇÿå³—ÈNËÎÞuÊ‹€ˆ€ˆ€Ô_)ëïµ×ÊE  ø¥"¤ µ+/äŨ¡ó2¢‡Í»µ ƒÕUJCÀv&]GüŽhÏ_K"v"Ú®›}ÄÊf×ìÛ<6ŸÍkó›EvJQVZK!hBТ XÄtËÛÑe^b“‡4šºiÔ½ÏnÂdò›ˆG·ocìlÂQÞÈ·BØ2¡ßÅ‘á±6uM,µHÝï¬Í^¬C¿ËðåyÆ~I´]ŽÏ°+³™µciÿ½ùн•äßcŽë)õç;!WÑ÷tæý;B£y^O,Õ±mŽ¥âèõzüœÃ€h/ëx–ø±ºƒ=ƒõF¢ õ&ØÜA ö311Y%A"e•`®½“ ÙsOAd[Xv*+Á1ðÙU½ª^½zµÏÍÍ=Ûw^|[‡Y¸ðuEå @àÈ.ÚÙ\ßmA6-s" " " µ@ RµpIrYêu¬rXhÁ¡¹!®ÐO‚½âÒí¤ a'e¨{'¥~s ö¨öXå‡ÄžÕÚÿGñDOUHL@5Ñä<â’ᑜ ่©<[²&ÏdgâæÆ÷ªÒ–ÄÛ¦íyŒÍ}—‡xí[§rÝ ÀJƨ—R« ÐNÊ `”¨ZÑÍ‹ødXë–}ï ›ìÙyIN6Ï tÄ£¢æCBv‡…„=¼oî`;« !ནÒvâÚNʹ1¤±¶Kù&¢vR ¨Ìˆ€ˆ€ˆ€ˆ€ˆ€ˆ@ U¶“ÒžÄ_K÷r¨¸vþªÂûcÊúÌ¢âl©ND <ì¹_!?¹ÂóïÉž3L¸/B)Ž€¡¾è<“òfògõLJ (ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@}"P©"¥‰‹<ý~€^N¾1Ï=Ê!ß¡C‡;yy¢½·8Ø7ú”¢ÿŽgµäÒ3Øèø|„έ´=CÛ«6޲=»ìˆçòñl›ã½ŸmÃønŒ•q'7_EêXSol?‹{zEìh¬ÔL!¼Ö»`««àÐmÞnß7¨ ör'¯&>H\E|8ž¸XÙá8&°·$¦¯'¾H,õ 0è« µšÀ€xÞ,]#ÖQÓü©P䄈€ˆ€ˆ€Ôq¡•¹>´ÁÙØ?;22²?"Þ±<ø¼åÓÒÒÒ¦ÚÛ+Ã-"<ö¡~—S4hP¿øøøV999Ki[Çó’:Úø°°°¿ ÎÀ®½yÕh¿Ëç¤Þ¥ÓO©ˆ@„ºò BB¾ =÷ÀÛÃb%P–º–—€ ‚Ï;§G¿%šhYYÏ£3»fßæ±ùl^›ßü@ …ºG€?®þ“¸Ÿ·yÇy¯.==}-õÿç]W™ù &ø½­jʳVxÉÌ7&—e<÷±÷3f‚÷Êÿµ·d{×;ÏIÄÇítS°mËžˆ€ˆ€ˆ€ƒ@¥í¤ìÝ»w "ã• 6l»dÉ’]æìÊ•+3¸1²*¶cÆ•””äþ%A2Ÿ‡¥–©wqgG\µj•ýéŒ_Mý ÄÊ_œ:DÊCާ®¸q3œ³§HG2æÓ?bo£õ¥þ êÇ‘mGüû×Û\øÕ¿l׿iVÏÍ?#€.'_lèÙ³gCÞJù¶.¢CCâG¼!ó*@ŸÅ‹©Ÿ¹o%ަm=åY¤=ˆóˆvÃ8Ýž_™ËC⟢KßEøz‡Ý]ÔEPw=cßB¸KYA‚N $?ìäìùƒ·æݲ Š@@™ô°”öóÑDÃ{‰×M<±Ý•Á £04•Øšøqq+QAê4î3.ã^ìˆ÷qï3Šûœ*ùpOtÚ‚ ¦ÚîõŠ UéO±”¢–Ÿs¯xi~~¾Ý³•)pw÷{ïrŸk;Ç«$ÄÅÅ]ÊFÜG~È}úP6 쨒‰5‰ˆ€ˆ€ˆ€”’@¥‰””]¸Û?k;É[ôéºÒá3ßNÜË¥x×1GWnòF;uzŸ!$®sÊ^é ä3ØÕÙ™#äS¹¡´_~‡s£~6ža\?æLãÆÍÚ¢íR;þ÷î1ÇsÎîÝ»¯£l/u8“XlÀîÍ4t"våF¿)缬¬¬K(¿H<Ûç1× ¤kIí—â¯ÈßÀ¼öËñUÜOÁŸæ´ÍÇŸ±Ä˜ó¢µßIß–¤£‰×Ów;©‚T ”•bXFE ôì3x9qñ â)Ä`†“1–F´G†¬¦aÙšF€û¤S¹·˜F<Ž{‰C¤¶cØ gRîʽF ©ÝÇ,ò4Ùcuæ’oǘù´ÙNíÞn ÷r7Ùf¹ï±{©³ˆÍiû‚¶«hÛoã{%uw“ î¥m!mã©¿òˆíÈ/'uÑ/ Áï\Ëûó'11±IffæLºu'f2î„·q›7oƽÔ=Ô=N¼xm¹çž’’’NÙo0Ñÿf0Æ~Îl#þqIjjênØÙ#ƒlÎFÄlâT|}“Ôo`Ø`:åÝ wÀ`±Õ1×?(¿ Ç®ÌsÀ»_Isâç,úÙ}æ›øôgÒ6Øy n³ñ®‰çúo`'„ûôGr¥SšB ´ií=åµÏMWk⯥ß›¼«œÈM¶{—f1ãöq7‘Áíˆ/Ñ~¢õa§cå>ö—lnf÷1§í.hcmÜrâ5äÔŒŒŒã9‚>ƒÖ^V_R`üÄÉ+¸56ƒ±ß`ÂmËÆŸNÛ<ìØ/}™÷¦ý‘ݦ¶Sèõ¡n8ÉúØØØ×Ûµk—Ži7øZ›ÆÍ·›cvV¦®Ñ¿" "P§ ˜€Ø›ø@WiöÌ®Ê ƒ•¹šE!°÷ ñêoƒ>“û޳¸?Is¼äžb ÷&=¨3‘ÑP¨7ÿêÿHz?© ’C¬å}ܳdÐ'»§Rµ‹²û„"˜}·&cóRìŸu6åþDý'qo3šì*ò=,ÒÇ-PRçòçϾ}û®¡ËÏ-[¶ìÌœö¡6”·³¦‘_B¼û°¡¤±ÄŸðñZR¿ÁsÄú|£E‹±ÌovC¸Ÿ<ڲ晴ÝM}g?4„òc0=ɯQ¹/=–¾±Þ­¼Æ}CþCNàLóªsgKšn íâoxÄQgî'ÏdÀÝÿ ôwM܆=ÿpOû/l täÞ{Œò" " " "PÂ+kn@7°“Ðv/ Ü…p3uœ‰sE| ÜÈmàÏ-$z7ñWâfÜ$´#ÔVO?{‘ÎcÞ}JÈïpêña7ù†VÆÎ¯ÜlžO|™Åã©Ú„Í0kcž;ùKóßÈ®Ÿ?þ—ܤ>Hþ-k+.ào&kžŠ­~¤‡°c±ðH7Îî5êÓì·ÙYºté/ÜÐgy|kOìÂqœŸ­l¾ö×ñcñÏDL¿Üп" "PçäyEµg"ÌïÊàÓ§ô]Z†þê*A!À=„ Y¸WšCt!LÙ.ǃe1޵ŒÝjcØågÏoµ0ˆû•ØšÍ=’•íÓÍ-Cý@ÆÌá^o­•Ï=÷Ü=ô±?ÂV(`÷îƒFÛ ~ˆ¶ër:uO`ôæË&Îä4ÍO6 ~½C9!Єˆœ&ú5@¸{6î?#þ]É=àOöÜNÄÊÆÜ¯}lvìx4v“ðá|Š&2–è“]÷®R§u9NÞRNêÜÿ€é¹ôu7š“5å4nÜøÏ®ÈÍ0°?´ØóE7K¼&nãžlŒû‰krUîëêÝ®¼ˆ€ˆ€ˆ€TJ)ÙøÍ¦M›ì9ݹ±]é,ÐŽ¿p#öožáÓ’ɽN½oJŸ/¨»Ä÷íŽü•ø)ĺÚÜÉ÷WR™›:÷§o;7›vœðZDÕQ5Zµÿ~;æ=Õú!PÚË|úoÛ¶­5ÂâÕˆI}úôin¢¢¯+ÓgóØñ£~ܘobí§:Ä«ožå™çKŽ·ÁQÆl—ƒÝ`š i¶Á¬p÷$Ç›{žki7þùÖOAD@D ÚD1ó?ˆíËàÁvúÚî+÷ØÊ0N]E B¸oˆæÞâo#”½ïM¼›湿Iñt²cÜï!¼}é "ï>ƒy»¿ÜæÔ{Ä¿B1Œû%;©Ræ{PÖÒÑN«¸6b¸7sÛ¡ÍB¡øŠ/»)G:}ý¤¶ŽŽ@iýìÔ¥ÜǵgŽÂù¬Î3§ûÙVööÓ×lü)r¬ûƒ>؇(ykx–6÷ÏòçäÈ{á:1nðvæ±´ØkRè„'ãaÕÈ·^e¨N¡•59á=ÈÍÙ8ì¿j¶y(í™H“ȾâO ´¾qqqsIþ»k×®ö„ºpì Ãæ%ØxÚú#pÛ;ëìø4B`åe”›½¹­#íf5::ú)æÎáæÑi;bzÚÍÖ{&PöêÕ«%~žCùˆ›piKå&ý&aés#Ñ}#Mý"âÙöÒê\¶fnFWÚú­¬ " "Píîăö¶w̶¼Šv÷X’ ‡³úWªŽ§860[÷„„„6+Â['’ӹר@Å=O2vâ¹?úœûžUM›6Ý€MGü´ý Ü÷Ù w`^Û}ìüax }»Ùk­ÂRîsLüóÇêÑÖ Q1”{2ÛY™låòø|ÅØ6øZ¸Ó“Ó+'zîã>§í4+›}|l‚ß0æ+[`-{¨sÿÁÂŽŽó‡g÷}"HþMœíß?<êÿÚ.MÆ›½¬–|À9ÿ7ºh.À5)ÚÙåêÀ±ù4ßJ•E@D@D@D : TšHi‹b7à“$óþ>äæt'7^vôæ}žÝ86Тí Ï0º”~m²³³¿G¨Û‰÷›±y~ÑÆ—¡ý5|:ÿVpc¹†üF›“Ò†ÜxÞCy,mŸ±óñkê ðöi¬qý“¹‰¶cáïQv‹Åøs ¶‡§§§ÛÎ{ÆÓÏ”ÂÌnNÇ#`~†?kYó½Ô_kj16T%" "PµLl¼Ëz×—hjD hoøM$Øÿ}§¹súGªˆÞÆTwqRÄ^˜b÷OOroòß¿íÀÔͲûê. mºåùéùæù$ÏÑv®Õ—[½ÄÁ{©åþÌŽ@̱åTlžlmÜË|H›[k÷PÄMTñüaÖe»áÞf2÷:ßÑö÷:ï8pÀ-húó‡ûÇÛ7„>ŸpTùò­ðc²ÍYÞ`/­ÁÎðÝ׳Û_qbçŸÄ¶ÜoîÁîUäPÿ!÷‚ßÓwL åÃp»KcìjÕóþt+«/ˆžw0f»+Íœ%Ù÷wM¼Ç ÈžÃ:6Ú±yïzåE@D@D@D Þà†÷˜ò.ÖþZn½.ïøÒŒ3ÿlžâúrÄ»)ó‡׿[Ç y7ªÍ}ë½Ëž>W:6û÷ï͘}öW{§«3ÇŽÒºI ú¢¹c£†Ì-k~š=ÄJQ êÂg ¶|Y_cû{ç[ P/JÙ®TÐŒÈ"?­â…>PÅóiºLÀîg‚íž Üô)ήÝW±Kò8ڋݵi;(ÌZ7Ö_ÝûëSž6»³XÜXóÓîÍŠkóÜ׵çÒì-ÎD±uþæ,v€§Òß5±µ®_:B´?;jª&àË©êyëý|Ü ¾ „pþ’½„›[;b´…W×{0P* Ïow0õî-íkåêÔÙöi)ˆ@í$ðÝK\߯[jÎ׆ÿzàg g½Cî-nû¡?æð¸+I^)‡‰ò 1‘rbyjŒÔÜs%r¿ç»v0¾ÍNÊݾõuµ ‡1ÜsÚIžÉÜsþ­®®S먽Jµ;°ö.¯æzΛ¯åˆ”<ƒã9^xá…rÃXs–g5ŠÀùƒíx™«Ó€Á® ¯_£|“3"Pï½2Ù)Ë2¬:úšˆ:ƒíb!·–sö‘Œ3er¥Ëõ(É;D÷KFHD@*‘¢\ âÜ;$©¯W÷Á¬w¸ßÜY‰¸eZD@D@D@ÊM ^Ýœ•›R% ä“Ù˜µgCY´ç3Y¢ " "P3 ŒÂ­î¶%1ºœþ™Êù‘¿Nµ<är=LöÏå4¥a" e ÀËkì=Wëu€ƒ=/]AD@D@D@j,Ð뙚AÀž}7¥+ÿü¡‚þtfüu‡mÜ@Ò¥‚æ4\D@D@D@D@D@ê zµ“’gñLåÊårÌ¥<«Ô‹ÎÌx³ä |;«¢~zB?œ¿˜?SINÝ3*ɶ̊€ÔO¿ûÿöò\üø v°eq—MÑÛk+Ê*´ TPé­-(Öºuq¹­µjE\ªÖ¶ÚÚÖ¶V±Vk/.TPÔJEÙds«Š[Ù7Ѱ…-ÿßsȤ'á$$@rò›ÏgœwÞmÞùÎ$šÇwfjñi‡±íÿ‰Ù;º\FñqäR©¿<—µ¨}¾@øÒ°‹ ( € ( € (“õ*HÙ¤I“[Ö­[W™?wéÅÞÑqò¾¡þ¬ƒ8‰š RF€rÊ.Eòà (kSjó udpÕ5í±5}EÔ“ç½ÿ‹ÍS¬•YúQééÊT´Ž ( € ( € (Pj4HÉìÀa›6mº˜v|æfgÇ0SpÛõþD¼l2éÙä@›‘¬ChÓ•¼ûÞK@ò3ëׯŸHùIÿoaaáÏØ>‘·;ë™ߎ£MòždûOòŽ#=œôØÎ¤Ï¨·tŠôl ê}yãÆ'3†[ÙïeÉBïÔ?ƒ~GÐGAôÙ»wï>òÈ#Ñï÷É?ƒò|òï˜8qâRòî`\÷Ð÷Ûä÷ üxÊæÜº’׌5>îzeüôÓOÛ³;ûç°}‹¼Ì&c+'ùY=¨Û޲ßrŒþc!}ÜÀ9\ÃWÂ¿Æø®"ï$Ê¿]Ô›@½óYŸ¤ÎOY#°yþË(+ Ž’WÙ%9|º²•­§€ TB 6ÿNy†ñËÿQ:<þ¥Õ´'SQ•(ä_1«ÿTÖ™ÕµLP@P@¨/ jêD ’}ÀÙ‹Ì仟õeŽ“ž Ç#06ŠÍï;vìøë<Ò·‘w<ÛôBúFf,¾Â ¿ñdHÜ›€ä0ò_%ïvfO.Ž™ìÛ·oßöшc=L›1k‘t ï&ýõ¦^¯¨“,îòÉLÙ53gÎ\zÜqÇýš6?ëׯ_© -uN$ÿž˜…ç@o(ûÈÿ}Ýù3þxËzjÌ¢¤¬u.ãØK(‹Ç­°žÈç]HÞ”'P8ýùáCÞ ¤ïŒ:ÙʶòhÕªÕrÆsmç4nÜx5Ç Ç½b6'õ H¯ç8ŸP'ŽýJ§NîíСÇœó¥ì5õì³Ï.âø×EÚEP \(þ0þÅò›r«T®àµÿôÿ£Ìe娬¥€ ( € ( €õ@ Æ‚”ØÅ À¹†³’4A´N¤Ç,\¸ð£X©w û}’ri$i¶«¨AÅNÔ›‘ä |ƒýå<Ú¼OäQþnRÆv eócŸ``!éRÁGö»°®#H—®=‚uO™2ecF‘<ˆz%ã&8cúôéïÆX5jT2êM'o©1Æ·©÷vÒû3¢,öI/e?vãÑô˜]YâC0ñÙÈ϶dó`¬+éã®/lذáŽq:ý5,ÛžüެÝk<^¥Þ~½zõJ©l}÷P@² L%wü/ùÇGY‹+—ùCªñ/šl.®\ k) € ( € ( €õC Tð®:O9pǾ™ôÉþçÙOï’^Áz-Á¼±‘1hР&k׮ݔ.äÒ6'éŒírÚ÷Höyìzw­nÓ´iÓÅ*SùÊ“ª[m ú­äïV={öŒ÷C¦¢<Ú}2ôÄOÄëÂ’å޹²Ó£GžŒícò–³=üt`‘c޼E ã¼öbFe+‚™1›1–Ï‘wo$¨S2FÚD`q`ä/û%‰²Ûl'ÃöLÎedóæÍç¬Y³æXêÝP¶-Çþ˜¼ÉaÓ³'£œ£- r®*[×ýº'ðæ‹SSþùºº7pG¬@±@ÜÃuh¹˜_ìÇÿ4•jôóíôßh3mK»xåÆòíèÂ& ( € ( € ( @Î ÔX’àáÎn-þ8ËBOÍPŒãœ6pàÀq\¶lÙ”EË2ê”JÔ›L›‹,vŠÇ” PŽ Â[Ó¦Mû˜c©ºÛÚ™5kÖùæT<‰º¿%}(}_MàóAÆ“Ùü)òÔû™W­Z5– _|7!Æòuf#Žãý˜ ÉGªŸåì· Þ!hú-öo#¨Ù•Àawê^È~¼+³dá|¦(M}›5kö>} +)¬D‚ö{3þ—â‘ó¨Î9œÂ&¿¸é¶-"ͱc¬×ÄX8ï7yè0Æx-çôEf`6c ’Š»ÔA·^š–ŠÕEvŠÀå6þ…õýsHt­Â!ãE¾—o©³óo¯BS«* € ( € ( €õB Æ÷ž:uê2z—H»Éx¬ù=öׇ*³ÿbÆß§+V¬XB€ñe‚h­X¯²ò–xÔš²ë ¬½L@îMú:ýÊ«_‰üÓÛE¬¤¯?1¦ â±ïÌvZob?‚“ ì½D:ýþHòÇЦ!w/"?þhý°sçÎcŠÉþ¥ôûÊ©Ô;ŸYŒÏ“Wj‰À ÆÑ çÑÇ›V5`üúÞ¿YkéÇ^N›ñ(ú‹ì‘²ÅÇþ1ÇyŽz/0¦Ë);3ÆÊø%J©¹S—ò¬«¹rÔ•Ÿ½«˜öÿéUmü îC`s.kQ›[]P@P@P`{âëÞÌ¢<:iOúëͦ$û±ÇŽ™M™žñ—™_Qš@[>}·­¨NUÊè¯Ý¶êSg·áÇ7.[Ù‰­#(X6?öãqt¯<¨p‰ó‰ÇÃ+¬TAaX\Ý*Øy™ccü «Ó­‚!Y¤€ äº@¼O²èVfHnsåëjEü’ŽÀä¯vÌ•»à˜RP@P@¨²À6ƒhUÁ·æÌØ{Ýx¬m-ë9Ì<Ç“'Wq£€ ( @]hÊ _ç_ Vbô1}’ålb'¿wæAÊ«væ=– ( € ( € (°=U}ĸÒǘ7oÞšx%³ ãã0­ X&@ùJ¥;°¢ ( €µS`ÃEàñ«+?¾Rug(+?ºzV3žŽxÿý÷w‹WÓÔ³S÷t«Q K—~fÆŒ¼ÍÁEP@P@P@P 9—Õ¬ó«süq\úËzr¬›XsjftuÛmëºU¥<ó^ØÑqîêßyU9oë* € (°+¶z—ᮌÇV@P@Üà)‹þ|¼nÐ.<ÓûÉ]xü­͇í¾ÏS'ûnUPK2øÐÞ|>Ì7´º†“y¾Mš4¹…{â7ÕÑwu³¼11Þa¼Æèžú\uŽ¿¼ãåj~]±ÛÑqÖ‚ßy¹z y^ ( €9&Pc{瘓§£€ ( @Î Ä×¶ž5kV¼C³ÔÂL¢§ ÊŒâÕ- £€]SùÃ}Daaa¼ÒåRþ/$ûxÒÓ›5kvfo"`uív'oÿ6mÚtûøã»1ŽøÐP'ò'Sç,Ž»<Æ·aÆ_p¬(‹×=ÙªU«oO™2e}EÐñ¯”]N›BÚœN'³?’ý'ëÙÓ§O/ N,Ý[¶lyv$h÷s6ߤޛ¬Q÷ÝÈç£v{3Î ÙA~<Î{©§¨ÿ(éËæÎû<ý)ÿEçÎ7nܦâY˜ïSÞ–co¦ìÚÂöÑüüü3fΜ¹–:Ñßu¬-©ã?kÕªU'²?€µ'åE4݇²|ÚMÞƒë‚è›tÌ>ÍãÜnÅãzÊ‹zöìù9ŒKþ¡”¯$ï—Ô¿™±}¼²¿Ší7XçÐî»ô}'éýYõØ–Z8Î~ôó{2»³ý kúhÓ¶3ljë6ˆ¾ããQ•uw£îYû±Îjذá匡ý–œ/Î{м=á–òÜã|8—Ñîc¶#©»„ô©\“‘.Y2Ç™íþãÞ~¶¤rq‚¾#ø:†µ5c{ )§ÿ¼lîÜÿ²ÿ¡Þ:Ò-ÿ‡ÉøÙ’²¸ç¯`mÎz5cüÛ}Iÿ[Ý×QF»¬÷a”e.œ{WÆ;—¼Ž¤ï8þøã/0aÂWIŸÅõ<9êòaÊFÜS3Ó ø¹IÚÇùpœŸ±ÿMê/e}Œñ¬d|?§ÏøäXb]Ìú=ò§±±•{N1Û>. ï˜ütüœÅãïœë¢-eCØÄûxÁµ™ýH/#}!c›‰Ý)‰cØê^¡Î‹ÑOæB½‹ã|é§€¶·Ì™3çÎø`$g“&ù{Pÿ¶Áƒ_Kþæòî)Æþ¥²¿{–/_ÿc«{!sœyPv*Ç¿„>:°¾ÎyžÍÏþ»´/ùÇuYÞ½PÙ{–¾]P@ÈI9yVž” ( € TI€?Ž[¯_¿~¨ÅñtÙÆüáÝ•Cã$Ÿ`@WþÀoL )e§°¿‚²Ï±~´fÍšv¤(¿ŽÍ#m۶݃ò¿°ÿ»¼O›xduíbö`3Öì?Ü$hÆvun& ùyò×Ð.þèO1¾ó(‹€Ça”Áö‚1,J‘›SD°dm"°ÁÊnìw$¸ùU¶)²Y@`s#ÁŽsI÷çø_¥^ŒùxÖôBðõò÷ ”EÐîa\öd»˜ü£·ÔJ dû…E‹E@0Æ0œMœÇîÔù1í"0¹î8Á£¦þŽü7nãÝmõêÕç2æ¿’Ž ð5-Z´¸Ÿ¶ÑþBò.$ÈqcŽ ê(ÒCYO¦rNyŠ~#ø8ùûÑþ"²n"˜Û†t|à)‚yïÒW÷Ædù?eFþƒ j¶ÔBßwQw!ë¡´kEaû¨PÜ_—HWe|Ô½ƒu#çûeúx’1Üší|9^ú8å¹Çñ©3‚mçú%ÒsJÜ_¥–Ìqr¬­î¿R•Ù!ÈðÛYÇÐ6‚•qMÓKþ$Æp3Áî«IŸí줯ÎEPù—|cmGYÖûº¢ûpËHþóOú8ó¿–c $=ì‘G9•@wü,Åãç{EMî©~l6d(#Ÿ[&ÆÓŸ±  ýÏhAìøŸqMÿĺšët0å·’56òc¡^ÖsêÝ»wGî—‰”O"8ùeªnàgô®â6»Sv}]Ì~üŒ^ËþùÔ=Žô#¤õâøä¥¯=é­î•¨“¹Œ€ûô;‚ú#èç†çÿò¿Çz éÓ&Nœ8Šmª¼{Šö¥~÷|úé§íÉËz/_2Îò<ðߟ²ßrüÓ8lÜW/p^Söw^E÷BeîÙ8'P@rUÀ e®^YÏKP@*ðÇ~wªGÀ"W1›¨Ò Œo"pr3¯>âôÙ?>>*ÂìE¤&ð¸3¾n!8Õ;f6‘3×Sÿ“8û…̆º‚ýñ´?‘¬W:uêto‡>¤ßKÙÿZÔ#€òÁɘ=÷»Ëéû5Ú¦3QNÛ›Ÿ}öÙEäÝGYcê^O¿oS4…óëuØÆ ¾˜u’˜Áx'u^aý Yó"?f^‘ßòË8ÖÊb¦âÖ¨ÿ8}|%êQÁÜñäõ)<ì‘1ók<鉴ÿ7u§n'f˜†GCÚ÷༊8Ÿ¡ÇwÜ 1Ã’:ëé§€àé:Òa2W÷ÓÇLÒ£Èú}ÇŽ_b1ÞF^: J示‰óŽàÝ¿È_Kà2 úÒÇuŒõâœénöã¬s©ÇeYþòJ–#Ž8â³ìD+fÿ-¡Íè’Â2 Úos|˜äSo0㺆s\ʹFpïg´6Ð]©óî+r/>|cÿ ³!ß¡Ÿ{Y;çgÝpì­î¿² E°o~Xãôé˜iš^H"±•;6k([ÇñWÅ,Þ-µÿóOÊn¤¯W¨7žÜîû½+º¯é'ë}øŸK¥žÂà!Æû|p¬áÅcx”Zd{ç$ÖûJµÚ²3œqü>ÆÆúÔ™ÙqÝIÇ,è+÷ÝwßeüìÝEz)ÁøŸé…ò­Î‰€ä0ò_åÿ’>2ëVf|ôß…uÔôq#XC`éá˜ÅšÙW’®È=êÐ׬i_ŽÁÁRãOúI¶•¹ÿ¸gºÒgÉ=@¿é{ ú¨È=9F¶-÷Ôù«è'‚µY³Þ×äg½3ú(I2Ö™Éíæ°îûŒ;ó'bÜ€¼˜ÅyR/Ù’õÒøÈ#=;¶\÷Žlò(!¹ÇØ™‘ýXÓK9ç?'3’:ñ³ÏþrmN‰þ2ï5”¥ï~¦·º÷(«ì½rug%ÇäÁkÞåX¸ïKÆBùtòö©Ä=Uò»§¢{!9^²ÍæÁ}½’>Žá÷Ó ül¿ÃñOg¬%¿Ÿ’¶äwdÍz/TæžMúq«€ ( @. ¤ÌÅ«ê9) € (PE @êѹsçNÌv*õž¿â®6ó‡y̲LBbÖ]²tˆ¼Ø‰`"€· `¶”àDz.]º dVQ"òü¸âÙzI»ô–ú%A+þ¨wNf,­“•Gj÷Ž™xôyetÕ ?cŒYtÓXó’Î2ûIò2·ÌÁ1›+òék)“3êìiÆ®ïÅ,¬VeŸ£þâ|²O`ðLÊf1;òŽÛ›õhÆ5)©O$X™d¥·!žàø]ÙéËšO0ã¶RŠwèoS’O_+èû{‰G{fmE0$Þá7òxä» ›žlc¦jÚ„ü×諼1%Çá:EÀfÏxô?ò¸–ÍØ´KÊ3·•÷ËJêµâ‘êæ¦fç–¼×¹Çb¶q©…üyü •ÌŽÄûà¨ÀLÏÙllÚ´iÇäãݰ{‘ŽÇ¾ÓK¶s¢`9×÷ â*)»ŽG¢Ûp/ޏW{rOÅ–gþ,sìøy]´­{оJÆXѽ/Ùfóàçñ›”ŸÉ¹œËï¬xÏêUô_òû)i˸ʽ*sÏ&ý¸U@P  RæâUõœP@ØNøL¶¦üa½ŒGÌ®J=úè£ñøuãŒzŸ!o@ì3sélf$YÃö¡ Œˆ#A”_ÑG!Aƒ˜ÑeYUüQ?™õ¨ø€uâ’à fÇcŸ´ß›¬G Æ-(ˆÍ~…³é¢dY¼xqwúž“ì“~š>OŠw3÷÷•(#øeï0#ì[±_<–̶“ý¿!ž‰‘Ž™›C Îü#ê—·0ÛqO‚ f´Ã'fƒÅì·¦Åõ£–å´÷kž–÷–-[v'AÒ«.}–ö â=–ô÷ Áš˜Aלºa\å¥xFÚB0ã1Ôè/ó:—×gÖñÐ…ó¹æ'ECÎûPÆv5ÖkÙÝê|+áÝTe)ïþ+éƒk81õæï÷éa%…|؈ý­Ü3Ê+¤Ÿrïkʲއåt~Tã^àÚ¡mÜ‹)fñ­cóû?eý[¶¶äO¢Íˆx;®uúE=úz›ü…Ü›gÄ~ü„+Vü»¸Nde]°›L»#㽞Qö#ؼ5mÚ´zViÙÆ½’Ù×SœÇ`®UÓ¸^Ü«cC¼[2|¿6äÇ,çxmĬªÜSÛ¸2Ç5MûøýôReO³¾¹­à ÁÕ÷iwMfÐoåGs];'ûÔ½Ÿõ{É~l㾌Ÿ±Ì¼m¥c<Ûs¿”×/ýmóç;¬°l\¶fĶ.ï÷Jeï©8Ÿòî…²Ç˶Éë/2ËËþΫè^¨Ì=›Ù·iP@rE Jÿ’+'íy( € (PO"HyUMž+à jÜÍì ÿªÉãØ· dˆ "?†7°GœG1rZ¶šÔÌlÉk)û#ëþ¬_ãGÄìælõÍS@P@v¶€{ïlq§€ ( @ ôXÈé\–C§ä©(P§x¬¸ˆ¿Çcëg— Œâñì ¸ñ>½ý ìu#ýzu8Š~ûGô{ë5ÕÕwyýÄGH8æ›|Å{.ÂȬ—9žÌü]•®¬wæ¸kÒ‘ãô¥ÿ ¿½«¬x㞬߭©ãsÏ\ž|¼%Ó»¦Žg¿ ( € ( @® ¤Ìõ+ìù) € (Pƒ7nœß¨Q£¡Õu…ß'P¸oôÇG=nác ¿©®¾ËëgõêÕ‡qÌu|üg?ÖG3ëeŽ'3W¥+ë9î師LÊ;.÷NÞ™:¨¼òÉ/3ÓþêeË–¥ÿ[:Ó{Gúµ­ ( € (PŸâÅÙ. ( € ( @ªW¯^Íê´ž5kÖe9˜‘¶AŸß“ßí_XÓÁ>ÖÑ™ÀÙMäbfÙÅló øMùƒü. Ý¥¤c6[uo={öõ”Qw7òâ+ÃýXgñË9v7ê`íI»¢uëÖíA›”ßÒ§OŸ½Ù¿¶#(¯_ÀGBž¢Ÿ/÷#ò>f;’ü%¤O¥ì_¤K-1ëc\@yÌÔ|šàÝÙŒ}/òîd¿-}½H»/%˜!ømê–Œ‡zûPVr~7¾dÆ ¿ Î ä7c}²U«Vßž2eÊ*Ú>IþÝä]ÁÚœõjúþ]·.\øÊN"o%cþ N?#*ßõ”uf÷!úúáš5k"võv'o¶'%Þýˆ¼æŒë„(§ÝXŽñ“²ã®nGœ"(=†µ5Ç~€mz=ztƒ &œÍXÎd,{yÛàÁƒ¯%3mÚ±ÿÖ£X³~±N«Èƒ:%KyžQ!Ûue 8ï¸/[Ó6¾>÷FÉý±óWÆy9u ¹ÏNç\Nf?>,ódÜÓ§O/èÙ³ççðþ-u¥,®×/éëæ ü5:[µjÕ ôu#e%÷ ÷ø=åÝ÷Ô}ŠºÑOÜË£ø˜ÍcÑ‹ ( € ( @*•þCP@¨ßh%K¶ñdžíÏ£¿ƒhp³I`{A«ÿ‰È?€º#×v#HûKu»-Z´(‚“qÜ®”O½Ÿ> Þ‡‰Áäe|‡°í\PPpÛf¬#hó‚ʬìÆ~G‚Ï_e›bùǹ7ö£,î“›¸^mØ?7ÊitYïŠî{šÄyD@3¬^ˆ>\P@P@¶¤ôNP@P@Á®î0Äl½&¬¥ÞËxÄG|–¼þib6à‚,£ÙϺ|™ÀL³û™M6“ô(*ý¾cÇŽ/±Î#}yǬËg;˜@Ï53gÎ\zÜqÇýš>FpnuÖSVÀlÄu¤ÓKÌ¢$¯u.‹ã3û,f¶-`=qKTÇû 3@ߡν¬1±ÔB@q}¼JûÛg̘±˜c_Îþ±§âÜ>%½‘>–g6blkÙ/5ꕜ·NƬÍ÷¨·œã¾Fù^I¤od¬¯P>ž¼‚Y{ãLvÑžk×®=¤eË–¯µmÛvOŽóÁá /£þ߇ô}.cœ}Q¿ü+Šû‰¬’…c>Cþ#¬¯Å¹SpR¶qGƒêpÄk ã™ט1½@:f¡¦Òß"q{\{Êž!=–õÔ¸(;žñ]¹ï¾û.ëÔ©Ó]¤—Pý|y´Ûj¡­<Ë»®“'OnKý:YÍ'[uF÷óÍÏ>ûì"êÝÇxs-¯gÜoS4…qõŒ6äŸÇŒÖ›¨AðQw-ËöÜÏ+£œ{vyYoꌢh«û>êÇBù/ãZr¬÷·äøOP@P@0Hé} € ( €©víÚM% 3›õ4ÿ—IÂ,Ƙu¶4 ªrÞͬ“¤ üD'½ŒéDb 7+}_Ã~¶]X×ø™ãq`‚^˜ÜûeQ¨ÿvñqÓÅìÇ ¹xü:I°Ešã¯bÓ(Ò™KŒ%Ú$yÒÞ`9§ûHò·µÍýOàâ‘ï.É{²©°%×x«A’Aý¬÷}FÝŠ®gF5“ ( € ( @ý0HY¿®·g«€ ( @…ãÆ+ 2&ù€È»f$y<îïYlœ”W°÷ü–ùòä®*þ0Ï|‚f'E[‚AñQ’« ÆãÕ1«­efŸ6ß"ïf=ÆãÄ)‚¥]Ùt'/Þ?Y©…€Ùd‚GGÆ;£³ûF°ykÚ´i@«hÙj_}Ï]P@J ðˆêIg.%°ôMÎ#x³ÍGV™1yu?% µ„ÏË´oÅzmñ!ãkÊÑß|úúu/ˆÇ¾ :=CùMä_\\/UüøHöÓÇ'X¦ŸÏL¼ç“:ÛÚŒG‚¯'Àú2}¿IûÓÙ¯rW¸dOFƒøªó՜ۥ~üGÙjEË]{3m^c}ŠùÁî-ž½úö_a|/ÑO|èæŠ:*.û€cÿ‹>ã”ïð5ít›lã®GÌóè{4³Hçñ¸ú›Œ¡$(ËLÉ1Œ¡!ãYDYÜ'23wL\WÒ#¹ÞçpnolŽ÷•ÞÌ9?Gþ]´ÙʃüJ-]WîÙéû‹8ǵ¯ò﫤џ ¬Ï¥éôuëlÎã€âΞ"½0¾žé½û¾Êã° ( € ( € ( € (P×®¬îàä¶Uí3fÕ%³)˶%hµÕcãÔo:|øð†eëÆ~ñŒÅ ·ÍÖ.ÉãxùU=‡ŠÆC°-/Û9$Ç+o}&ÏgÖ‰ñ±î–™W^šÀÙ<~5VË< ŸnRѸ«Ã1Û1ãÀq^ůØjè}ûömfe Êó([¯¼ýò®+Ò奼¾ÊæÇ½KÿÍËæÇ~æ}]Ö›ýrïûl}™§€ ( € ( € ( € äª@µ)sª.žW¤¬‹cwÌ ( € ( € ”(yD§lû ( € ( €µW€GÇñ¸ñVï­½#vd ( € ( € ( € ( €õQÀ™”õñª{Î ( € ( € ÔA?œS/šCV@P@P@P@P — RæÒÕô\P@P@P@P@¨ƒ)ëàEsÈ ( € ( € ( € ( € ä’€AÊ\ºšž‹ ( € ( € ( € ( €uPÀ e¼hYP@P@P@P@\0H™KWÓsQ@P@P@P@P  ¤¬ƒÍ!+ € ( € ( € ( € (K)séjz. ( € ( € ( € ( € ÔAƒ”uð¢9dP@P@P@P@rIÀ e.]MÏEP@P@P@P@:(`²^4‡¬€ ( € ( € ( € ( @. ¤Ì¥«é¹( € ( € ( € ( € (P RÖÁ‹æP@P@P@P@È%ƒ”¹t5=P@P@P@P@ê €AÊ:xѲ ( € ( € ( € ( €¹$Ð(—NÆsQ@ú!н{÷¾›7o¾eîܹ‡vØa7pÖH_^ÞÙSÿ¨M›6Í›7ï©òêÔ–ü#Ž8â³k×®ý=ãé——÷qÆ GÍš5k^mŸãP@P@P@P &œIYªö©€;M I“&·ý¦¢ ü>¿}+ªS[ÊÖ­[÷;ÆòV«V­:5hÐàÒ7>ܯ_¿¦µe|ŽCP@P@P@šp&eM¨Ú§ T»@·n݆ÒéÖÖÌ¢| 9A½Sæmdÿ–Ã?|ËëX[²ÿ$¾³V­Zu"ûX{R^Ô¨Q£6lØð öO N³âzßž2eÊ*fe>IþÝä]ÁÚœõjf_FÐ0U<{ózÊ;³û}ÿ6ëèóHÆó+ò:ÌXΚ={öòh“,Ô9œvßOö3¶¿aèìŒýH~µ }Ç9Mä¼ßçú’þ«‹ ( € ( € ( €9)àLÊœ¼¬ž”¹%гgÏÞÎ:† `+&gHÞîÛÇlC‚…¿£üÄÆ@ùn«W¯>7??ÿ¯¤Ÿ&ÿš-ZÜ¿~ýúó¨y‡°<‚í!ÿ‡mŠüèo$u‡°û]Ö_$Ü­G{0óÊÆ2só¶ ΢¬m&Pÿfúú<õ×Pï¶¥ÆU@½ùeWÚdVä>C&F?Jò9Öû¬»'ûnP@P@P@ÈEgRæâUõœØAÏ }è3+Ç[¹ƒÝT[s#ÀGðîþè”ààîFd Y³fEìAò߬C9æ˜ÂÑ£Go¦þzÚÄÌÇ^½z=@{xÏã{7ÓÏk”í•ôEúFf7¾Âþ+´+ ȹ73/#¹lΜ9Œz½{÷>—ǰÛS7fi¾Ò©S§{#É’%ñxöã$/Šýdaܯ‘¾>Ù/o[XXØŽ²Õ™åôû-3óL+ € ( € ( € (k)síŠz> Tƒ@a*辶Cÿ>¯q~êúOÇ y«ºÜ¡.*v%˜87é„™‹Ï¼+¤œ4iR!k$ÿz><óKêOzì±ÇΧ͢¤]lcV#Ä@ögAÊXK>LÇj>Ȩ¿ŠþòÙ?ˆ:³’ü3f,&½˜ã £¼ÛÂ… ?Jʨ—"ºÏÌ™3—&yëò/Mö“-çq=†OMö9örêµJö‹·­Ù¾W&Ï]P@P@P@rJÀǽsêrz2 T@QQªqªhóë7l~­ÙЇîm1düª§çíë…`Þ;´<0£õ~é’$b?Á¬Å®dÄ;ó™y[Iaq‚Àämé²AêÆû%§±æ%õ˜µ¹9Igl?!½²Ï+&÷ä•ÇÐÏǬ“™yÙ:Y[¶l¹wf€2Ú|\J½ñeWœ%̨7mÚ´É[OP³df'ÙXߎrP@P@P@rUÀ e®^YÏKê(J5$`yʦTêÅfCÆÿ½ÙIã{TG·U타â4‚w½y<{_ÞÛØˆô°²}DàÇ¥àkGð1f=ÞGP0ù*öÚ¤™&ooÊåÑí<¶ï³<šýmÍ*ŸB½Ãè;†±\ÀŒÌ¾äMf=ŠqE`4>®3ŒwUÎŽ1Æ~²0[ra<*že]ÔI¶Œï~Òçñ˜zŽïÞÌoß¾ý«I¹[P@P@P@rQÀ e.^UÏIj(Ê+JP´±èÙ¦CÇ?ÙòÄ¿÷¯öCTÐ!ïœG r4³ ç|“ª¥‚€Ñ”àû ¯#9ƒà^<¾=š6éG¬Ù>ÃþMä_ÌöFê]Í£ÚSøˆÎƒì?Ê~:ÈH:ëBÐó_ü„5ÞSùõ¿Äz3³'Ÿ'ïÇŒë9ò_`æåÏ,þ2wÖ¾¶•Iû«¨3d„ ÿfû[Ö³âQömµ³\P@P@P@º,Pòˆc]> Ç®@}h6xB‡y‡¥¼Õ ÁæRZ© fNŽeeÇŠúâÕ‹3óò^·æ¡&VT¯:Ëæ7e™>}z©¯b—=Fß¾}ÛO:uYf~|ý›‰Æ·‰cAʶKÞ%™Y·¼tŸ²æ´‹Ç¿K–áÇ7\¼xñg˜1¹¼$sÙÎa»´yý¸’ÓŽÀ·‹ ( € ( € (P« RÖêËãàÈ.ÐℇÎß”—º9{éÎÍmÊûóq‡|{ܸ04¾œí¢€ ( € ( € ( € T›€AÊj£´#rP /µ‰ð丩Ôu«Ç/\»( € ( € ( € ( €Õ.`²ÚIíPº/À¬Éõ¼÷òOóS×:nï¿tQ@P@P@P@jN€ R;wéÖ­ÛnÛ{Ä¢¢¢¼=z´ÞÞö¶S@Ê 4Iõ_7~Èw PVÎËZ ( € ( € ( € (°c;e&e?üðŸ0Ôo’nyØa‡²Ð¥K—‹Þ}÷Ý&ëÖ­û4Ûiäåå=3wîܯôîÝ{÷õë×ÿ–>Ž Ý&K(û-ewG;öd3¬l5ÚoÖ¬Yï$ù8»mÚ´é^Ú”ä¹U@­V޶rë\sP@P@P@P@šØ)AJ‚‹dø]7n<=ö{„|ˆàå^qº|pQÆ ÷(,,œÚ Aƒ¿ÐþôéÓ§Ðþ0Ú?A¿‹çÌ™óLÔ%hyqçÎéd7nܦ$Û7ÎÏÏÏš™gZ¨E}ËWª0žøý7­ õ­ª€ ( € ( € ( @­¨ñ eŸ>}Zd<­Y³f{O:uY(Ìž={9³G<$ö“`"37H,Ù'?E òkTy›`䘨 íç’<̷䤃”›“~’¼²[éÿ&òÑþG›Ynž@`ô¶Àûoذa8EŽrP`' \Äñ:Nà½*qàç©3 •Ú‡ÍhÖ±º( € ( € ( € (PgjõâC:ñ(wU–÷“Ê´_M:?Ùw«€ ìDš¤R-®®â¯¤þéT£©ÔoIV6¾YÅ£X]P@P@P@šhPÓ‡èСÃk£_ôމ?% f&øø&ï¡l]’™%A0óE²û 4ˆ¿áÿ³ðµï_­ZµêžÿäT=E`²¨ê­l¡@íX;튧MÜÇ®uÛà[çq;TñÖjCýâ—õöÍ{ ŠgouP@P@P@\¨ñ™”|Ìf=ÊK@»›™“ÇòxõB” ŒIC潑ŸVÊ»Z°`ÁyË–-»…ð\ÄÇmÖ®Y³&œÿCó¸ŠÚZ¦@® ðƒûÂÚéW¤:î»Gê Aƒsõ4sþ¼ø–š9é®Tóåï¥.Üγ/Å‹t_hÚ!@ù3ζÅvžqí~Ázäº5©Â5«RC¾S<·r;ûÛÙÍýóu)w6ºÇS@P@P@j¡@ü}»SfS¶e6åòí9èèÑ£ðÊÖ¬éÍöôarH hÐÈK RÖÑ Z¸vUj̨CR®ø õ$ç°£¿Œ/¦ßçå¥~tëÓ©~¹Î¨DrÒÝ?ñî(A9ç<Ð+9ÞU;ù˜NP@P@¨²@ÌJÜ©Ëö(c)7 Ü©—˃) @ <ñן§>%@yýWGtî2úÙÇÇÿvË)^‡QC£¶[P@P@P@jF`§<î]3C·×],°Ç?dÁÃ+Pg^œöpª#£ïVMg_ ûëµo<—zã…§Sÿuhÿjêy§uó•v¤º{ ú'uwøŽ\P@P@(_À eù6–T,Ê)W±TÊ8vÄ%©»~úíÔߨðò*U!5uDzîÓåó©¿tdZÖšªSjÍHjï@ú1´§kïð™ ( € ( € (°ý)·ß®¾·Œ=ýê;Â.>ÿ)»øø~ºõ?9õÔ·¦Æ0óq(ýìè7¹ã±ñ¥¬ÿ{þÍ© îÀÈvYÓ~»ìÈuçÀñ{×EP@P@ÈI¤ìÖ­Ûå]ºt¹‘/u¯'½ÉÁóæÍûW]å«äÝù*ùXÆýß;2núyŸ~úÐÏ¿w¤ŸZÐ69tFO-¸¡n äñ‘›aç\—ºåMý†SøáœÆk´>z{jªó÷ØžviSŸìR~®€ ( € ( € ìZÿpÎðáÃcJÏÕË–-«ñcíZJ®€ TMà€/ôI}±÷ñ©_Ò죪5-U;œ[}65äÌ1¥òÝQ@P@P@P ®ÔøLÊ ü50V­Zõ³(ˆ43ˆN"ý0Û`Žž;wî‘øá‡ÉWiE²e“4hpV¶¯wïÞ}ئM›®¤^;êÜÌÌÄcècÛ<ú¸”íw)Ë£ìVÚ_O_EÌ`|’ü»É¿‚µ9ëÕÌfüÛJ—ªéçúFŸsš4i2júôéïòÕñ&L8›¼3)Ûƒz· <øÚø9ãټߓ31ÿšÖÒÏ/H¿Ên§,Å~?6§s§‘žÎØ/aìS£ÌErW ‹×>;)õÓÍ›R?ߎӌwZNcýÆW¥Z´n»=ØDP@P@P@]/PãAʆ žK@qx~~þÑ3fÌXN.Epî(ò" AË; tχ~ØŠü çÎg}’6?e½„ò‹2™Pv&ÿÏ%ÿ5ú¸‹m›¨CÙ7éc}Ç+Þò©÷'‚„“IÏ&ÿÚŒdB›®äÝG ôÞ¨W™ãR/–ý©;‘ñ}‘>~ZXXøGòŽ{ä‘GÎaû}òÏ <Ÿ²;&Nœ¯‡»ƒtŒo>ë9ûJÊÛ“Že6kSÓAJ¶§PþÛXþÎ9¼·%é?(_àͧ¦ýóuåW°¤NìÛõÔ¯ÏKÅ/’øåTÙ%Þ¹p9ëníöN­üèÝ:y/Ä=좀 ( € ( € ( @^MÄãÞÌ¦ÜØªU«fS¦LYG`pÁ¸ï2cðQv1óqÛ#ðÉvTçÎûŘ–,Y²ûÆg¦áÁ™c$Èù=ö‡Ñþ«‘Oßasõ:SöúxŒ÷_þ:Ê8nüÍߎ²ŸÄqIŸEú ¶ÑnÓ# dö­äq»Ól:³'Û0{²€qLò_mÛ¶mµbÅŠ'èãúþEqß—sŽ_mÚ´é°µk×®àÜöš3gÎû1«’6K¨síÞ§Ý{#»vèÐᣅ ¾CßÝbffôá¢@%Š*QÇ*uH`c½¯ ãýÔiÚ9²Ôø¿rÄ©ª§O\UÕFÖW@P@P@v¶À.yO$A»˜e}Û+ZɶÛŽ¬ÝÖEÀî#‚‡¯’¿_¯^½ö)ƒ3"çfäÍJÒ´ïDzLÒõ®a¿ORN@ðƒ$ÍvõceGÖÊ7š¾ÊHð(ö«lÖ¬\¹rÚwjԨьÈ/^¦“·3-`i(#ŸíÛlÒAÈ'žxb5éGZa¼}I¿a€—ªDPÇ5w .™ÄVÉ;àEêÅTn–øŸ2¹p¤OÆ( € ( € ( € ÔOF»â´ @n.{\Š“7™’_KÊúõë×’Ù—«’ýØF€’à7“<ö?Ï~z—ô Ök Ž #oÂLÆMéBþ±#Ç-îcϤ¯ž={Fð´}Fàs9ÛÙ>åa?ǘ5nÜx)Ê={ôèÑzÖ¬YŸpm¶~ýúvQ§x¹zg±¾I›¿%™nP ^ ÜÂY÷øTªCÃJœ~übã7_üþ¹¢Õ­¢€ ( € ( € ( @­¨ñ™”ãÆ‹¿¥×¯Y³¦EEê&³E@/ýJ¶ø8NAAÁl•¥©Ë~>xG02Eàt̺uëîe–ä"Ö÷”Î;¡ïuN✤ÍÅTýˆ²·W4KMš4©üxGæ¾|TèÃt&ÿ üqfVFðõ±$Ï­ Ô §8ËX]P@P@P@P &’ÙÛê;>´Ã,ʶåÕ‹¯{3‰ò褜ô× HNIöc³+{¼¤Ý¶Ž›Ô‹mß¾}“/tgf§â±î˜MY*³x§¼sbìæFdkcž ( €;(på¶·¹ ( € ( € (°Sâc ujaæasf#¾Î og]Ëz³ÏãC6ëÒ‰˜<„“ßaÌxìû‹1«².ß±* € Ô RVøÚ“:qRP@P@r^ ÆßIYÝ‚¼r AÊÃéw!k¤×µe±Ér¶Kxü”Å"nP@P@P@P@P@P@rJÀǽsêrz2 ( € ( € ä®@›I™»—Â3S@P@P@P@P ~ ¤¬Ÿ×ݳV@P@P@P@P Ö¤¬5—Â( € ( € ( € ( € (P? RÖÏëîY+ € ( € ( € ( € (Pk RÖšKá@P@P@P@P@¨Ÿ)ëçu÷¬P@P@P@P@¨5)kÍ¥p ( € ( € ( € ( € ÔOƒ”õóº{Ö ( € ( € ( € ( € Ôƒ”µæR8P@ª]`Qµ÷h‡ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (°Kþ?­=—k•Çþ´IEND®B`‚open2c-bioframe-4fe9b25/docs/figs/df1.png000066400000000000000000000047231477525772300201750ustar00rootroot00000000000000‰PNG  IHDR<i>Óù÷sBIT|dˆ pHYs  ÒÝ~ü8tEXtSoftwarematplotlib version3.2.1, http://matplotlib.org/£ò:Ú 1IDATxœíÜihTg‡ñÿ ‰ëd9iDÖˆ7ªT©à6E*EƒúAÜ(mQ«Ð@„j£Ö(‘~ˆB@D ¥-VŠ"¢ HÐDA[—j1Ü&D$E£VCuž÷ƒ80Ø6iìäèý^¿OžãYî†Ë9&žsÎ À°” H6‚˜Gðó`ÁÌ#x€y`ÜŒ3´hÑ¢.¹WCCƒÆ¯=zhàÀ]rOè‚@‚'NÈó<µ´´üës×®]«^½z©¡¡AgÏžMÂtɱk×.…ÃaeeeÉó<566=€ÿÁà?sãÆ M˜0ATnnî_óäÉ“.žª}­­­úðõaÆ G$`Hkk«-Z¤P(¤üü|mÞ¼ù¥cöìÙ£±cÇ*==]yyyš3gŽîܹ#IjllT8–$åææÊó¼øã°£Gjâĉò}_ÙÙÙš6mš®^½¿®çyºté’6nÜ(Ïó´aÃ566Êó<íÝ»W|ðzöì©;wêþýûš?¾úõë§ž={jøðáúöÛoæœ2eŠ–/_®ÒÒRegg+77WUUUúóÏ?µbÅ eee©  @»wïN8ïÎ;š7ož|ß—ïûš>}º®_¿þï[II‰Ö¬Y£ &üë÷À›à Yµj•Ž;¦ýû÷«¦¦F¿üò‹êêêŽikkSyy¹.]º¤Ã‡«¥¥EóçÏ—$õïß_û÷ï—$Õ×׫¹¹YUUU’¤Ç«¤¤D?ÿü³Nœ8¡ÌÌL©­­M’ÔÜܬ¡C‡ª´´TÍÍÍZµjUüžkÖ¬ÑgŸ}¦+W®hÖ¬Yúã?4fÌ>|XõõõúüóϵtéRÕÔÔ$Ìúý÷ß+==]?ýô“V¯^­’’Íš5KC† ѹsçT\\¬O>ùDÍÍÍ’ž_8V=T[[«Ó§O«OŸ>š:uªZ[[“ó¦x38&üþûï®[·nnÏž= û233]qqñßžwõêU'Éݾ}Û9çÜñãÇ$wïÞ½¼ß£G\JJŠ;yòd|ßðáÃÝW_}ߎD"N’«¬¬lwþ¹sçº%K–Ä·'OžìÞÿýøv,s999®¨¨(¾¯­­Í¥¥¥¹üÑ9çÜ7ß|ãìb±Xü˜§OŸºììl·oß¾vg8{ö¬“ä"‘H»Çx³ð `ÄÍ›7ÕÖÖ¦ñãÇÇ÷…B!92Ḡ.hæÌ™0`€ÒÓÓõÞ{ïI’šššÚ½þ‚ TXX¨ŒŒ åçç+‹µ{ž¤ø=^xöì™***4jÔ(½õÖ[ …B:pàÀK×5jTüÏžç)///áõ¤¥¥É÷}ݽ{W’tþüyE"¥§§+ ) )33SÑhT7oÞlwNv¥=€®óøñcM›6MS§NÕîÝ»•——§––Mœ81þhêï̘1CýúõÓÎ;Õ·o_¥¦¦jذaíž'I½{÷NØ®¬¬Ô–-[TUU¥‘#G* éË/¿Œ‡Ë iii Ûžçýå¾X,&IŠÅbz÷ÝwõÃ?¼4Cvvv»s°‹àŒ(,,TZZšÎœ9£AƒIz8—/_Vaa¡¤ç¿'§¥¥E›7oÖÛo¿-I:pà@Âuºuë&éù·0/Ü¿_ Ú¾}{ü?5_¸pAOŸ>íÔ¬§NRQQ‘>þøcI’sN×®]SVVV§®÷˜1c´wï^åää¼òµØÂ#-ÀˆP(¤%K–è‹/¾Ð±cÇT__¯Å‹'„KAAºwï®mÛ¶éÖ­[:räˆÖ­[—pÈó<9rD÷îÝÓ£Gäû¾rrrT]]­7n¨¶¶VË–-SjjçþÍ4dÈÕÔÔèÔ©SjhhÐÊ•+‰D^éõKÒÂ… •ŸŸ¯™3gª¶¶V‘HDuuu*--ýÇŸÔúí·ßtñâE]»vM’tåÊ]¼xQ]£GÖ¡C‡^y&¯Ï9ç‚ ™ø†˜Gðó`ÁÌ#x€y0àæ<À<‚˜Gðó`ÁÌK z¼þV—•éa4ô@Reø¾¾®¨z IBð ]£Q|º1è1€¤jª^ô’ˆGZÀ<‚˜Gðó`ÁÌ#x€y0àæ<À<‚˜Gðó`ÁÌ#x€y0àæ<À<‚˜Gðó`^jÐàõ—áûjª^ô@Reø~Ð#H"Ï9ç‚ ™x¤Ì#x€y0àæ<À<‚˜Gðó`ÁÌ#x€y0àæ<À¼Ô Òê²2=ŒFƒ†dø¾¾®¨z tŸÇ:ïÖTÇuÅšú¿ž‡Ñ¨ >Ýô0¤©z}Ð# “ø<è8Öyǰ¦:®+Ö´€y0àæ<À<‚˜Gðó`ÁÌ#x€y0àæ<À<‚˜Gðó`ÁÌ#x€y0àæ<À¼Ô R†ï«©z}ÐcÀ ßztŸÇ:ïÖTÇuÅšòœs.éw´€y0àæ<À<‚˜Gðó`ÁÌ#x€y0àæ<À<‚˜÷?1÷ÆFíˆÛÂIEND®B`‚open2c-bioframe-4fe9b25/docs/figs/df2.png000066400000000000000000000044441477525772300201760ustar00rootroot00000000000000‰PNG  IHDR<D…áïsBIT|dˆ pHYs  ÒÝ~ü8tEXtSoftwarematplotlib version3.2.1, http://matplotlib.org/£ò:Ú‚IDATxœíÜ{HÕ÷Çñ×W4/§çä…°¬T\¨ED *ç¢ËÉöGtc(+èNÁ¶æ(·ßüÃY Œ@"ÚÈQJ0… djÒe›Ž¶i²ÕŒ…©©±¹v>¿?¢‡.6»ýð|€à÷ë÷ò>~9ðôûUcŒ€ÅB‚=ÀËFðë<Àz°Á¬Gðë<€å–-[¦‚‚‚Wr®öövÍ;Wš:uê+9'< ‚@€úúz9Ž£žžžÿ¼oQQ‘¢¢¢ÔÞÞ®~øá%L÷âݾ}[Û·o×ôéÓ©É“'kóæÍêíí öh^ ‚À såÊÍ›7OS§NU||üc·ùçŸ^ñTOwãÆ uvvª´´T¿üò‹*++ÕØØ¨5kÖ{4/ÁXäÞ½{*((ËåRbb¢JJJÙ¦²²Ro¼ñ†¢££• •+Wª³³S’tíÚ5åääH’âããå8ŽÿqØ©S§4þ|¹Ýny<-Z´H—/_ö×q]ºtIŸ~ú©ÇÑÞ½{uíÚ59Ž££GêwÞQdd¤***ÔÛÛ«5kÖhÒ¤IŠŒŒTff¦>0çÛo¿­Í›7«°°PGñññ*//×ßÿ­­[·*66VÉÉÉ:räHÀ~Z½zµÜn·Ün·–.]ªßÿý‰ß³¬¬,UWWkùòåJKKSvv¶¾øâ 9sFwïÞÑu0ú<€EvíÚ¥Ó§O«ªªJuuuúé§ŸÔØØ°ÍÐЊ‹‹uéÒ%ÕÔÔ¨§§Ç7còäɪªª’$µ¶¶ª««Kååå’¤ÁÁAíܹSßÿ½êëë#¯×«¡¡!IRWW—^ýuª««K»víòŸó£>Ò–-[ÔÖÖ¦+V诿þÒìÙ³USS£ÖÖVíØ±C7nT]]]À¬ß|ó¢££uñâE}øá‡Ú¹s§V¬X¡ôôtýøãÊÏÏ׆ ÔÕÕ%éAðåää(""B :þ¼&Nœ¨ÜÜ\Ý»wwïÞUxx¸¢¢¢þã0jVèïï7ãÆ3•••ëbbbL~~þ÷»|ù²‘d®_¿nŒ1æ»ï¾3’Lww÷SÏ700`BBBÌÙ³gýë233Íž={üËF’)++vþU«V™õë×û—³³³Í[o½å_öù|&..Îx½^ÿº¡¡!fNœ8aŒ1æÐ¡C&--Íø|>ÿ6÷ïß7Ç?~|ØŒ1¦¯¯Ï¤¥¥™íÛ·?ÓöÆîð–¸zõª†††4wî\ÿ:—Ë¥3fl×ÒÒ¢¼¼>^_ýµNž<©ŒŒ kÿþýÇHJJRqq±>þøc%&&jÛ¶m ÑñãÇõóÏ?+++K[·nÕgŸ}¦ðððÍYTT¤7ß|S‹/Ö‚ 4~üx­[·î¹^»$EEE©±±Q)))Z¹r¥¦OŸ®üü|õõõÉív?vŸææf]¸pAmmmJOO×ĉýçÎ{Ž1Æ{€—‰;<Àz°Á¬Gðë<Àz°Á¬Gðë<Àz°Á¬Gðë…{`¤ŠvïÖí;w‚=,á‰ÕÿJJ‚=Ƙ0ß{\? ‡àÁ˜uûÎð®ö°Ä–o{„1c4¾÷¸~´€õ`=‚XàÖ#x€õ`=‚XàÖ#x€õ`=‚XàÖ#x€õ`=‚XàÖ#x€õ`=‚XàÖ öÀHybcµåÛcÁ–ðÄÆ{„1c4¾÷¸~ŽcŒ1Áàeâ‘°Á¬Gðë<Àz°Á¬Gðë<Àz°Á¬Gðë<Àz°Þÿç|Ùoðd_æIEND®B`‚open2c-bioframe-4fe9b25/docs/figs/df@.png000066400000000000000000000061711477525772300202130ustar00rootroot00000000000000‰PNG  IHDRÐ!\ÙsBIT|dˆ pHYs  ÒÝ~ü8tEXtSoftwarematplotlib version3.2.1, http://matplotlib.org/£ò:Ú ×IDATxœíÝ}h×u¿Çñ×lI™Ö²4mK¬4[f™Q&QP¡VtŒRÂXÑ-Ý\ÝP!uþ:¥I÷YD”$vã?ó²²R!ÁÒ»¡$‘rÑì[w–©íüqÎép‘å>på÷7}<þÛóµ÷˜>ýí§«ëììì Ð%=ª݉€€ h(   €€€ h(   €€€ h(   €€€ h(   €€€ h(   €€€ h(   €€€ h(   €€€ h(   €€€ h(   €€è¦ÚÚÚRWW—-[¶üéÛÌž=;Ç{löÞ{ï455å–[nùË·`û4ÀNlãÆyàòÍ7ßdÅŠY¼xqî¹çžªgtk Ü}÷ÝillLŸ>}2lذ,^¼8IòÛo¿eúôé9ôÐC³ß~ûå¼óΈ ’$'Ÿ|r’¤¡¡!½{÷Îo¼ñ‡÷{õÕW礓NJÏž=ÓØØ˜–––,[¶lÇ}`;! P±5kÖdæÌ™yë­·òÃ?äå—_ÎàÁƒ“$?üpæÍ›—×^{-Ÿ}öYöÝwß\sÍ5I’¥K—&I:::òã?f̘1Ûýµ–.]šáÇÿm À® ¾ê»ºÝvÛ-›6mÊêÕ«Ó¯_¿ßã9I{ì±Ìœ93MMMI’©S§fРA™3gNñ¯3kÖ¬¬\¹2O<ñÄ¿k:À.©®³³³³ê»ºgŸ}6>úh>øàƒŒ?>÷Ýw_<ðÀôêÕ+õõõéÑãÿ¿aøË/¿ä£>ÊæÍ›sðÁgóæÍ©¯ÿëÇCæÍ›—+¯¼2‹-ʈ#þî`§& jÈ÷ߟ+¯¼2õõõ™3gN† –Y³fåÄOüÃÛ~òÉ'ù$Iòõ×_§µµ5IÒ¯_¿ôèÑ#üñŸ¾ï%K–¤¥¥%Ï?ÿ¼xø7ÐÛ´iS¦L™’ý÷ß? ÈW_}•iÓ¦%I®»îºL˜0!ãÆKŸ>}r 'dÅŠI’^½zå¶Ûnˉ'ž˜†††,_¾üïûŽ;îÈwß}—3Ï<3½{÷NïÞ½sÆgìÐ`gã)PÀ#ÐP@@@ 4ÐP@@@ 4ÐP@@@ 4¨¯zP­ÿ¼õÖlèè¨z;‘¾ ù¯»îªzF·P‹_>°}vq::òèL®z;‘üsnÕºZüúóùƒíó(   €€€ h(   €€€ h(   €€€ h(   €€€ h(   €€€ h(P_õ Z}òέz;‘¾ UOè6jñëÏ綯®³³³³êÐ]x ÐP@@@ 4ÐÝÐã?^õ„nÁºÆºÎ­ºÆºÎ­ºÆºÆvÝ ùéwêwê:·êwê:·êwêwÚq4ÐP`·©S§N­zåŽ=öت't îÔ5îÔunÕ5îÔunÕ5îÔ5î´cøQÞPÀS8 €€îF.\˜aÆeÈ!™>}zÕsjÖ§Ÿ~šSN9%GqD†ž|°êI5mëÖ­9æ˜crÖYgU=¥futtdÒ¤I9üðÃÓÜÜœ7Þx£êI5ëþûïÏðáÃsä‘GæüóÏÏ/¿üRõ¤šp饗¦ÿþ9òÈ#݆ 2vìØ :4cÇŽÍ·ß~[áÂÚ±­[Ý|óÍ9üðÃsÔQGåœsÎIGGG… köîôî½÷ÞÔÕÕå›o¾©`Ù®A@w[·nÍ5×\“—^z)«W¯ÎsÏ=—Õ«WW=«&Õ××çÞ{ïÍêÕ«³|ùò<òÈ#nõ|ðÁ477W=£¦]wÝu9ýôÓóá‡æÝwßu¯?±~ýú<ôÐCY¹reÞÿýlݺ5sçέzVM¸øâ‹³páÂyÝôéÓsÚi§eíÚµ9í´Ó<0ò¿¶u«±cÇæý÷ßÏ{ï½—Ã;,Ó¦M«h]íØÖ’ÿyé•W^É Aƒ*XµëÐÝÄ›o¾™!C†äCIÏž=3yòä´¶¶V=«& 80£FJ’ôéÓ'ÍÍÍY¿~}Å«jS{{{^xá…\~ùåUO©Yß}÷]–.]šË.»,IÒ³gÏ444T¼ªvmÙ²%?ÿüs¶lÙ’7æÀ¬zRM8ùä“Ó·oßy]kkk.ºè¢$ÉE]”yóæU1­ælëVãÆK}}}’ä„NH{{{Ójʶî”$7ÜpCf̘‘ººº Ví:t7±~ýútÐA¿¿ÜÔÔ$ » ­­-o¿ývF]õ”štýõ×gÆŒéÑÃofݺuéׯ_.¹ä’sÌ1¹üòËóÓO?U=«&566榛nÊ Aƒ2pàÀì³Ï>7n\Õ³jÖ—_~™&I /¿ü²âEÝìY³rÆgT=£&µ¶¶¦±±1G}tÕSvzþÔd§õã?fâĉyà²÷Þ{W=§æ,X° ýû÷÷_mÇ–-[²jÕª\}õÕyûí·³×^{ùVûŸøöÛoÓÚÚšuëÖå³Ï>ËO?ý”§Ÿ~ºêYÝB]]G »àÎ;ïL}}}ZZZªžRs6nܘ»îº+·ß~{ÕSv º›hlļŸ~úûËíííill¬pQmÛ¼ys&Nœ˜–––œ{î¹UÏ©IË–-Ëüùó3xðàLž<9K–,É\Põ¬šÓÔÔ”¦¦¦ß¿‹1iÒ¤¬ZµªâUµiÑ¢E9øàƒÓ¯_¿ì¾ûî9÷Üsóúë¯W=«fpÀùüóÏ“$Ÿþyú÷ï_ñ¢ÚöÔSOeÁ‚yæ™güec>ú裬[·.G}tœöööŒ5*_|ñEÕÓvJº›8î¸ã²víÚ¬[·.¿þúkæÎ› &T=«&uvvæ²Ë.Ksssn¼ñƪçÔ¬iÓ¦¥½½=mmm™;wnN=õTnÀrÐAeÍš5I’Å‹çˆ#ލxUm4hP–/_ž7¦³³3‹/ö.ÿ„ 2{öì$ÉìÙ³söÙgW¼¨v-\¸03fÌÈüùóÓ«W¯ªçÔ¤#F䫯¾J[[[ÚÚÚÒÔÔ”U«VeÀ€UOÛ) èn¢¾¾>3gÎÌøñãÓÜÜœóÎ;/ǯzVMZ¶lYæÌ™“%K–däÈ‘9rd^|ñŪgÑ=üðÃiiiÉQG•wÞy'·ÞzkÕ“jÒèÑ£3iÒ¤Œ5*#FŒÈo¿ý–+®¸¢êY5áüóÏϘ1c²fÍš455åÉ'ŸÌ”)SòꫯfèСY´hQ¦L™RõÌš°­[]{íµùá‡2vìØŒ92W]uUÕ3+·­;±ãøI„PÀ#ÐP@@@ 4ÐP@@@ 4ÐP@@@ 4ÐP@@@ 4ÐP@@@ 4ÐP@@@ 4ÐP@@@ 4ÐP@@@ 4ÐP@@@ 4ÐP@@@ÿü)ëäͱoÆIEND®B`‚open2c-bioframe-4fe9b25/docs/figs/merge_df1.png000066400000000000000000000057001477525772300213500ustar00rootroot00000000000000‰PNG  IHDR<D…áïsBIT|dˆ pHYs  ÒÝ~ü8tEXtSoftwarematplotlib version3.2.1, http://matplotlib.org/£ò:Ú IDATxœíÝLUõÇñ×¥‹¢•Ë$S¤L —§Í-`ÕþH·pF¿)¨£Ì¹¬?RÌœSAil™EóÅb‚aP`€…¸¢±}…{¾|çýJˆ’EèñùøëžÏý|>ç}>÷n÷Å9ç^,†a01—‘.`¸x€éx€éx€éx€éx€éxÜÒöíÛåçç÷—Æ´µµÉb±èäÉ“ÃRÓŸ}üñÇòõõ•‹‹‹222þ•}¸·xÜV¯^­èèè¿<®½½]ñññZ»v­ZZZ”’’2 Õý󺻻µzõjËÕÕU‘‘‘#]`jà×ÛÛ«ûù÷C›››ÕÛÛ«èèhMž|XµµµÊÌÌÔ;ï¼£ììlIRJJŠ–-[¦Å‹«µµU­­­š?¾¤ÿƒ½{÷ª¶¶V;wîTnn®233%IË—/Waa¡$©¬¬L­­­zøá‡oºFnnnêììTbb¢ÊÊÊtòäIM˜0A111‚IzzºRSSuæÌyxxèùçŸ×믿®ÌÌL•••©»»[o¼ñ†³ÿ×_­U«V)!!AçÎÓÞ½{•ŸŸ¯·ÞzkˆïÃÎ0,"""Œ'žx¹íp8Œ‰'111ζ«W¯®®®Æ‘#G Ã0ŒO?ýÔ˜1c†áp8œ}z{{ OOO#//Ï0 ÃHOO7¬V«qéÒ%gŸÂÂBã0~ýõWg[qq±!ÉÈÎÎòÜáááF\\\¿ãX´h‘1uêÔAs÷îÝÆ„ ŒË—/;ÛöïßoH2Nœ81è¸ÔÔTcÑ¢EÎíØØX#**jÐþ×íڵ˘>}ºsûôéÓ†$£±±ÑÙv³5º™ŽŽÃÅÅÅøæ›o Ã0ŒÆÆFC’‘••åìsôèQC’ñÙgŸ9Û²³³ ›ÍæÜ^°`±yóæ~s6›­ßz&>>Þˆˆˆ¸m?wÎ:¢i 0¹àà`çc‹Å¢|P>ú¨³ÍÕÕUv»]¿ýö›$©¢¢B7n\¿yºººtþüyç¶&MšäÜ®««Ó”)Säíííl›7ož\\þw(s×ÖÖ*..®ßóááájhhôkkkÜïÞ™ðððý²²²ôÉ'Ÿ¨¹¹YW®\ѵk×4uêÔAç½.??_|ðÔÑÑ¡¾¾>õõõÝvÜŸ×H’Ο?¯ 6¨´´T¿ÿþ»‡‡.\¸Ð¯ß¯Ûõ9n|Ý&Mš¤ÎÎNuuuiìØ±ª¨¨PYY™Þ{ï=g‡Ã¡+W®èÒ¥Kšc†îßxOÝ×ç?ííò}ióH—÷” {6Žt ÷>c†îßxOqI ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜žu¤ Iãív]سq¤Ë€{Êx»}¤K¸'ð3tÿÆ{Êb†1ì{A\Ò¦Gà¦Gà¦Gà¦Gà¦Gà¦Gà¦Gà¦Gà¦Gà¦Gà¦Gà¦Gà¦÷_¶,Ó{gØIEND®B`‚open2c-bioframe-4fe9b25/docs/figs/overlap_inner_0.png000066400000000000000000000064301477525772300226020ustar00rootroot00000000000000‰PNG  IHDR<i>Óù÷sBIT|dˆ pHYs  ÒÝ~ü8tEXtSoftwarematplotlib version3.2.1, http://matplotlib.org/£ò:Ú vIDATxœíÝkP•ÕÇñßÄ­€a‘b‚ j^2S¥,Ci´¼45ZZÎä]ÇÛòr:äñÒEg|¡6MJ¦£Õ ÇR&Í *$XŽ:¥mµ!E§SX:Êÿ¼8Þ¶(p(Î>gõýÌ왽÷óÖú?Ï æ7ÏZ€ÇÌL vÍÀœGàÎ#ðçx€ó<ÀyÀa¯¼òŠzöìù_Ÿ÷ìÙ³òx<*))ù¯ÏÝyyyŠŒŒ všÀŸ®cÇŽºpá‚úôéìVeܸqúöÛoÿð8³gÏÖâÅ‹%I+W®Ô‹/¾X§fïÞ½zðÁåõzÕ¹sg­_¿þÏ  aÀA555ºqãFÐæ U\\œÂ‚ÖâU«Vj×®Ým_¿~]ù­EEEŸFŒ¡Aƒ©´´T‹-Òœ9sôÁü± Ð ÐÌ~ýõWÍŸ?_±±±òz½8p öïß/éßÁ¤cÇŽZ»vmÀ9_ýµ<Ž=*Iª¬¬Ô´iÓÔ®];EEEiÈ!ËEµK2;vìPÏž=®“'OÖ饸¸XÇWLLŒÚ´i£ôôtÔx<­[·N#GŽTëÖ­Õ©S'åççû×.WmÚ´Iéééòz½êÖ­›>ýôÓ:5µ=îÙ³GG………JMMUëÖ­Õ¯_?ÿõÕÚ°aƒî½÷^µnÝZO>ù¤rrräñx꽿 õ+I .T×®]ÕªU+%$$(++KUUUuî_­Ú¥À¼¼<%%%©eË–ºzõj½}\½zUÇ× AƒTSS~j­_¿^íÛ·×ÚµkÕ½{wM:U“&MÒêÕ«ëÀGàšYVV–¶lÙ¢ 6¨´´T½zõÒã?® .($$DÏ>û¬ Î)((P÷îÝÕ·o_™™FŽ©òòr}üñÇ*--ÕÃ?¬¡C‡êÂ… þsªªª´lÙ2½ùæ›:qâ„:uêT§—ŸþYÏ?ÿ¼öíÛ§#GލOŸ>1b„~øá‡€ºììl5Jeeeš6mš^xá…:ûq²²²4wî\•••iذa=z´ÊËË뽋-Òk¯½¦£Gê®»îÒ„ üONŠŠŠ4eÊÍž=[eee5j”²³³uê7""B6lÐÉ“'•““£Í›7kÅŠõŽéóù´iÓ&mݺUÇŽ“×ë½eݬY³­{î¹GÕÕÕJLLTÛ¶mUYY©*::ZçÏŸ÷_ãðáÃÎÏÌÌTII‰ª««u­šÈ4›_~ùÅZ´haï¼óŽÿ»ëׯ[çÎmÉ’%ffvìØ1“d§OŸö×$''ÛŠ+Ì̬°°Ð"""ìÚµkcßÿýöú믛™ÙÆM’•””Ôdgg[=nÛ_MMÅÅÅÙ{ï½çÿN’M™2% î±Ç³ &˜™™Ïç3I¶|ùrÿñ7nX—.]ü×T[S\\lffŸ}ö™I²;wúÏÙ¿¿I²ï¾ûÎÌÌÆo™™™óN:Õú1ÕP¿·’››kIIIþÏ7n´ˆˆÿçììl ³‹/Ö;·™ÙåË—ÍçóÙäÉ“mòäÉæóùlÑ¢E6vìXóù|æóù¬ººÚÌ̺tébK—. 8ïÞ½&ɾÿþûçÐt<ášÑ™3gT]]°´ª´´48qB’Ô»woõêÕËÿ”çðáÃ:sæŒ&L˜ Iúâ‹/tíÚ5Ý}÷ÝŠŒŒô¿Ž?®3gÎøÇ kp“ð¥K—4}út¥¤¤èŽ;îPTT”.]ºäQ+--­ÎçÚ~oU¢ÔÔÔ:57ëÝ»·ÿ}ûöíý=IÒ©S§4`À€€úÔÔÔzÇkl¿Û¶mSzzºâââ© Ô¹æ›ÅÇÇ+66¶Á¹cbb” ƒjܸqJHHPqq±žzê)%$$(!!áÿf/à2$¿ß›2qâDà)((PzzºIª¦¦F±±±*++ x:uJË–-óѲeK…††Ö;ç¤I“T\\¬5kÖèàÁƒ*++S||¼~ûí·f¸ÂºZ´há_{ý555Í:ç¡C‡4~üxeffjûöí*--ÕòåË\BŠˆˆhpì‚‚=yò¤ÆŒ£ÈÈHjÚ´iŠŒŒ X®Œ‹‹SEEEÀ SLLLÓ.@£x€f”””¤ððp8pÀÿÝ7TTT¤ûî»ÏÿÝsÏ=§Ó§OëСCÚ²e‹&Nœè?Ö·o_UTT($$DÉÉɯú~³èVöï߯9sæhäÈ‘êÑ£‡¢¢¢öÕ:tèPÏÝ»w¿m™éÈ‘#ujþݺuSqqqÀwGŽiÔ¹õõ{àÀuèÐA/¿ü²ú÷ï¯.]ºèܹsMîó÷j÷ -]ºTƒ Ò±cÇ”““£ääd}ùå—þ½HµÒÒÒ´k×®€1víÚ¥~ýú„A>ž³Í(""B3gÎÔK/½¤˜˜%&&jÍš5ª¨¨Ð¬Y³üuñññ2dˆf̘¡ÊÊJ=óÌ3þcúè£F[_¿)))*//WAAÒÒÒôÉ'Ÿèý÷ßorŸ¿¥¨¨(}óÍ7ÊÈÈPrr²6mÚ¤G}TÉÉÉuêg̘¡uëÖiþüùš>}º8 ¼¼¼?­õö&"ÀuUUU6oÞ>Þ¼^¯=ñĶzõjóz½õÞ߆ú53[¸p¡ÅÄÄXDD„;Örrr6CßjÓr}›½oÖµkWÛ½{·™™ :Ôòóóo[»gÏ{à,<<Ü,77·Ñóh:Y#þš€¿ Ç£­[·êé§Ÿ¾åñ³gÏ*11QÅÅÅêׯ_³ö²`ÁíÞ½[_}õÕmkê$–´üYµj•† ¦ÈÈHíÞ½[ëׯ×Ê•+ƒÝxüÏ())ÑêÕ«UYY©ÄÄD½ú꫚7o^°Ûà–´€óøµtà<p8ÀœGàÎ#ðçx€ó<Ày༿ô¿–X¸d‰®üøc°Û€CÚ´m«×V¬v€›ü¥Ï•Ô½Sÿì6àóoý=Ø-n%-à<p8ÀœGàÎ#ðçx€ó<Àyà<p8ÀœGàÎ#ðçx€ó<Àyà<p8Àœì‚©MÛ¶:ÿÖ߃ÝÒ¦mÛ`·¸™Y°›hN,içx€ó<Àyà<p8ÀœGàÎ#ðçx€ó<Àyà<p^X°šêo‹ëŸ?ýì6àˆ;££µ|åÊ`· ™xðëŸ?ý¤œ'Ç» 8bÖöÍÁn@3bI 8ÀœGàÎ#ðçx€ó<Àyà<p8ÀœGàÎ#ðçx€ó<Àyà<p8ÀœGàÎ#ðç…» ©îŒŽÖ¬í›ƒÝqgtt°[ÐŒÓù÷sBIT|dˆ pHYs  ÒÝ~ü8tEXtSoftwarematplotlib version3.2.1, http://matplotlib.org/£ò:Ú IDATxœíÝL•õÇñÏ„#ç`h–EÄsNE”²L£E©´¦–.R—æ?„z»ÔõG?tsˆµ» L§«?lά**$‡râJ:jsøcÝÂÂa(ßûÇgQ ëÜÓýÞ÷k;Û9Ïó}žçsž?ØgÏ÷ 8Œ1F u€`£ðëQx€õ(<Àz`= °…°ØK/½¤‘#Gþׯ{âÄ 9ÕÕÕýׯ}#ÊÊÊäv»C@Qxüé’’’ÔÜܬѣG‡:J¯äççë»ï¾ûÃçY²d‰V®\)IZ·nžzê©€ýÍÍÍš={¶ÒÒÒ®ùóçÿákè `¡ŽŽ]¹r%d××À² ¿Gß¾}Ýý—/_VoþFkMM&Mš$Iª®®ö¿ïtéÒ%ÅÅÅ©¨¨H™™™,4€ß…ÂÙ¥K—ôüóÏ+!!AN§S&LÐÞ½{%ý§˜$%%iÓ¦MÇ|óÍ7r8:|ø°$©¥¥EŠWLLŒ&Ož0]Ô9%³{÷n9R‘‘‘jllì’¥¶¶V÷ß¿âââÔ¯_?egg«¦¦&`ŒÃáЛo¾©ÜÜ\EGGkðàÁ*//÷ïںu«²³³åt:•––¦O?ý´Ë˜ÎŒŸþ¹‡ªªª”™™©èèh;Öÿý:•––êöÛoWtt´~øa•””Èápt{{Ê+IEEE>|¸úöí+Ç£ÂÂBµµµu¹:§ËÊÊ4tèPEEE©µµµÛ­­­:räˆ&Nœ¨ŽŽŽ€òÓÉãñè7ÞÐüùó5`À€nÏàÏEႬ°°PÛ·oWii©êëë•‘‘¡x@ÍÍÍ Óã?®ŠŠŠ€c***4bÄ3FÆåææêôéÓúøãU__¯»ï¾[S¦LQss³ÿ˜¶¶6­^½Zo¿ý¶Ž=ªÁƒwÉòóÏ?ë‰'žPuuµ:¤Ñ£GëÁÔ?ü0®¸¸XÓ§O—×ëUAAž|òÉ.ëq µtéRy½^M›6M3fÌÐéÓ§»½+V¬Ð«¯¾ªÃ‡ëæ›oÖœ9süONjjj´páB-Y²D^¯WÓ§OWqqq¯îqOy].—JKKÕØØ¨’’mÛ¶Mk×®íöœ>ŸO[·nÕŽ;ÔÐÐ §ÓyÍq‹/Vll¬n½õVµ··+99Yýû÷WKK‹&L˜ ØØX:uªWß@AóË/¿˜>}ú˜wß}׿íòåËfÈ!fÕªUÆcŒ$süøqÿ˜””³víZcŒ1UUUÆår™‹/œûÎ;ï4¯½öš1Ƙ-[¶I¦®®.`Lqq±IOO¿n¾ŽŽ3pà@óþûïû·I2 . wß}÷™9sæcŒñù|F’Y³fÿ•+W̰aÃüß©sLmm­1ƘÏ>ûÌH2{öìñ³wï^#É|ÿý÷ÆcfÍšerrr®ûôÓO›ž~Lõ”÷Z6oÞl†êÿ¼eËãr¹üŸ‹‹‹MDD„9sæL·×6ƘóçÏŸÏg,X`,X`|>ŸY±b…ÉËË3>ŸÏø|>ÓÞÞÞå¸ÜÜ\3oÞ¼ÏàÏÁ ˆšššÔÞÞ0µ®¬¬,=zT’4jÔ(eddøŸòwy楦¦ê¦›nRLLŒÎ;×å DVVV—Ïy¯5&,,L™™™]Æ\mÔ¨Qþ÷·Ýv›?“$;vLãÇßÛu.=åݹs§²³³5pà@¹Ýn-_¾¼Ç§.‰‰‰JHHèñÚqqqòx<Ú¿¿òóóåñxT[[«GyDGçf-`3 "¿]›2wî\ᩨ¨Pvv¶Jª££C òz½¯cÇŽiõêÕþsDEE)<<¼ÛkΛ7OµµµÚ¸q£öïß/¯×«ÄÄDýúë¯Aø†]õéÓÇÿ¾óûwttõšЬY³”““£]»v©¾¾^kÖ¬Q{{{·Ç¹\®Ï]QQá/ š9s¦Ün·ªªªTPP ·ÛÝeº@hPx€ :t¨"##µoß>ÿ¶+W®¨¦¦FwÜq‡ÛìÙ³uüøq8p@Û·o×ܹsýûÆŒ£³gÏ*,,L)))¯î~³èZöîÝ«çž{N¹¹¹JOOWLLLÀ: NèòyĈ×cŒÑ¡C‡ºŒù=ÒÒÒT[[°íСC½:¶»¼ûöíÓ Aƒôâ‹/jܸq6l˜Nž­ŠŠ eeeé“O>Ñ|pÃ9+&&F111úöÛo5uêT¥¤¤hëÖ­º÷Þ{•’’rÍc¼^¯$éÂ… “×ëUddd@¡^DØ®­­Í,[¶ÌÄÇÇ›ÈÈH“™™iª««»Œ{çwŒ$“——×eß… ÌÒ¥KÍ AƒLŸ>}Lbb¢ÉÏÏ÷/t¾zÑm§«-{½^3~üxãt:Í!CÌ{ï½gÒÓÓMqq±Œ$³iÓ&“““cœN§IJJ2eeeþý ’ËËËMVV–‰ŠŠ2©©©f÷îÝ]Æ\½hùüùó×ÓyÓé4=ôÙ°aƒq:ÝÞßžòcLQQ‘‰‹‹3.—Ëäåå™’’’€ÅÐ×Z´ÜÝbï« >ÜTVVcŒ™2eŠ)//ï6ïÕ¯Áƒ÷úZnŒÃ˜^ü5-ÿ7‡vìØ¡G}ôšûOœ8¡äädÕÖÖjìØ±AͲ|ùrUVVê믿¾î˜žò€Ä”€¿õë×kÚ´ir»Ýª¬¬Ô[o½¥uëÖ…: PxüeÔÕÕiÆ jiiQrr²^yå-[¶,Ô±X€)-`=~-X¬GáÖ£ðëQx€õ(<Àz`= °…X-­Z¥ ?þê@Põëß_¯®]ê‚„ƒ]øñGÝþô?BªSÿü{¨#"¦´€õ(<Àz`= °…X¬GáÖ£ðëQx€õ(<Àz`= °…X¬GáÖ£ðëQx€õ(<Àz`= °^D¨௯_ÿþ:õÏ¿‡:Týú÷uAä0ƘP‡&¦´€õ(<Àz`= °…X¬GáÖ£ðëQx€õ(<Àz`= °…X/"Ô€õ·•+õ¯Ÿ~ u Xb@l¬Ö¬[ê‚„ƒÿYÿúé'•<<+Ô1`‰Å»¶…:€ bJ X¬GáÖ£ðëQx€õ(<Àz`= °…X¬GáÖ£ðëQx€õ(<Àz`= °…X¬GáÖ£ðëE„:p£ÄÆjñ®m¡ŽK ˆ uAä0ƘP‡&¦´€õ(<Àz`= °…X¬GáÖ£ðëQx€õ(<Àz`= °…Xï߃Ûrtð 5LIEND®B`‚open2c-bioframe-4fe9b25/docs/guide-bedtools.md000066400000000000000000000121331477525772300213070ustar00rootroot00000000000000--- jupytext: formats: md:myst text_representation: extension: .md format_name: myst format_version: 0.13 jupytext_version: 1.11.3 kernelspec: display_name: Python 3 language: python name: python3 --- # Bioframe for bedtools users Bioframe is built around the analysis of genomic intervals as a pandas [DataFrame](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html) in memory, rather than working with tab-delimited text files saved on disk. Bioframe supports reading a number of standard genomics text file formats via [`read_table`](https://bioframe.readthedocs.io/en/latest/api-fileops.html#bioframe.io.fileops.read_table), including BED files (see [schemas](https://github.com/open2c/bioframe/blob/main/bioframe/io/schemas.py)), which will load them as pandas DataFrames, a complete list of helper functions is [available here](API_fileops). Any DataFrame object with `'chrom'`, `'start'`, and `'end'` columns will support the genomic [interval operations in bioframe](API_ops). The names of these columns can also be customized via the `cols=` arguments in bioframe functions. For example, with gtf files, you do not need to turn them into bed files, you can directly read them into pandas (with e.g. [gtfparse](https://github.com/openvax/gtfparse/tree/master)). For gtfs, it is often convenient to rename the `'seqname'` column to `'chrom'`, the default column name used in bioframe. Finally, if needed, bioframe provides a convenience function to write dataframes to a standard BED file using [`to_bed`](https://bioframe.readthedocs.io/en/latest/api-fileops.html#bioframe.io.bed.to_bed). ## `bedtools intersect` ### Select unique entries from the first bed overlapping the second bed `-u` ```sh bedtools intersect -u -a A.bed -b B.bed > out.bed ``` ```py overlap = bf.overlap(A, B, how='inner', suffixes=('_1','_2'), return_index=True) out = A.loc[overlap['index_1'].unique()] ``` ### Report the number of hits in B `-c` Reports 0 for A entries that have no overlap with B. ```sh bedtools intersect -c -a A.bed -b B.bed > out.bed ``` ```py out = bf.count_overlaps(A, B) ``` ### Return entries from both beds for each overlap `-wa -wb` ```sh bedtools intersect -wa -wb -a A.bed -b B.bed > out.bed ``` ```py out = bf.overlap(A, B, how='inner') ``` **Note:** This is called an "inner join", and is analogous to an inner pandas join or merge. The default column suffixes in the output dataframe are `''` (nothing) for A's columns and `'_'` for B's columns. ### Include all entries from the first bed, even if no overlap `-loj` ```sh bedtools intersect -wa -wb -loj -a A.bed -b B.bed > out.bed ``` ```py out = bf.overlap(A, B, how='left') ``` **Note:** This is called a "left-outer join". ### Select entries from the first bed for each overlap `-wa` ```sh bedtools intersect -wa -a A.bed -b B.bed > out.bed ``` ```py overlap = bf.overlap(A, B, how='inner', suffixes=('_1','_2'), return_index=True) out = A.loc[overlap['index_1']] # Alternatively out = bf.overlap(A, B, how='inner')[A.columns] ``` > **Note:** This gives one row per overlap and can contain duplicates. The output dataframe of the former method will use the same pandas index as the input dataframe `A`, while the latter result --- the join output --- will have an integer range index, like a pandas merge. ### Select entries from the second bed for each overlap `-wb` ```sh bedtools intersect -wb -a A.bed -b B.bed > out.bed ``` ```py overlap = bf.overlap(A, B, how='inner', suffixes=('_1','_2'), return_index=True) out = B.loc[overlap['index_2']] # Alternatively out = bf.overlap(A, B, how='inner', suffixes=('_', ''))[B.columns] ``` > **Note:** This gives one row per overlap and can contain duplicates. The output dataframe of the former method will use the same pandas index as the input dataframe `B`, while the latter result --- the join output --- will have an integer range index, like a pandas merge. ### Intersect multiple beds against A ```sh bedtools intersect -wa -a A.bed -b B.bed C.bed D.bed > out.bed ``` ```py others = pd.concat([B, C, D]) overlap = bf.overlap(A, others, how='inner', suffixes=('_1','_2'), return_index=True) out = A.loc[overlap['index_1']] ``` ### Return everything in A that doesn't overlap with B `-v` ```sh bedtools intersect -wa -a A.bed -b B.bed -v > out.bed ``` ```py out = bf.setdiff(A, B) ``` **Note:** We call this a set difference. ### Force strandedness `-s` For intersection ```sh bedtools intersect -wa -a A.bed -b B.bed -s > out.bed ``` ```py overlap = bf.overlap(A, B, on=['strand'], suffixes=('_1','_2'), return_index=True, how='inner') out = A.loc[overlap['index_1']] ``` For non-intersection `-v` ```sh bedtools intersect -wa -a A.bed -b B.bed -v -s > out.bed ``` ```py out = bf.setdiff(A, B, on=['strand']) ``` ### Minimum overlap as a fraction of A `-f` We want to keep rows of A that are covered at least 70% by elements from B ```sh bedtools intersect -wa -a A.bed -b B.bed -f 0.7 > out.bed ``` ```py cov = bf.coverage(A, B) out = A.loc[cov['coverage'] / (cov['end'] - cov['start']) ) >= 0.70] # Alternatively out = bf.coverage(A, B).query('coverage / (end - start) >= 0.7')[A.columns] ``` open2c-bioframe-4fe9b25/docs/guide-definitions.rst000066400000000000000000000113041477525772300222160ustar00rootroot00000000000000.. _Definitions: Definitions =========== Interval: - An *interval* is a tuple of integers (start, end) with start <= end. - Coordinates are assumed to be 0-based and intervals half-open (1-based ends) i.e. [start, end). - An interval has a *length* equal to (end - start). - A special case where start and end are the same, i.e. [X, X), is interpreted as a *point* (aka an *empty interval*, i.e. an edge between 1-bp bins). A point has zero length. - Negative coordinates are permissible for both ends of an interval. Properties of a pair of intervals: - Two intervals can either *overlap*, or not. The overlap length = max(0, min(end1, end2) - max(start1, start2)). Empty intervals can have overlap length = 0. - When two intervals overlap, the shorter of the two intervals is said to be *contained* in the longer one if the length of their overlap equals the length of the shorter interval. This property is often referred to as nestedness, but we use the term “contained†as it is less ambiguous when describing the relationship of sets of intervals to one interval. - If two intervals do not overlap, they have a *distance* = max(0, max(start1, start2) - min(end1, end2)). - If two intervals have overlap=0 and distance=0, they are said to be *abutting*. Scaffold: - A chromosome, contig or, more generally, a *scaffold* is an interval defined by a unique string and has a length>=0, with start=0 and end=length, implicitly defining an interval [0, length). Genome assembly: - The complete set of scaffolds associated with a genome is called an *assembly* (e.g. defined by the reference sequence from NCBI, etc.). Genomic interval: - A *genomic interval* is an interval with an associated scaffold, or chromosome, defined by a string, i.e. a triple (chrom, start, end). - Genomic intervals on different scaffolds never overlap and do not have a defined distance. - Genomic intervals can extend beyond their associated scaffold (e.g. with negative values or values greater than the scaffold length), as this can be useful in downstream applications. If they do, they are not contained by their associated scaffold. - A *base-pair* is a special case of a genomic interval with length=1, i.e. (chrom, start, start+1) - *strand* is an (optional) property of a genomic interval which specifies an interval’s orientation on its scaffold. Note start and end are still defined with respect to the scaffold’s reference orientation (positive strand), even if the interval lies on the negative strand. Intervals on different strands can either be allowed to overlap or not. View (i.e. a set of Genomic Regions): - A genomic *view* is an ordered set of non-overlapping genomic intervals each having a unique name defined by a string. Individual named intervals in a view are *regions*, defined by a quadruple, e.g. (chrom, start, end, name). - A view thus specifies a unified 1D coordinate system, i.e. a projection of multiple genomic regions onto a single axis. - We define views separately from the scaffolds that make up a genome assembly, as a set of more constrained and ordered genomic regions are often useful for downstream analysis and visualization. - An assembly is a special case of a view, where the individual regions correspond to the assembly’s entire scaffolds. Associating genomic intervals with views - Similarly to how genomic intervals are associated with a scaffold, they can also be associated with a region from a view with an additional string, making a quadruple (chrom, start, end, view_region). This string must be *cataloged* in the view, i.e. it must match the name of a region in the view. Typically the interval would be contained in its associated view region, or, at the minimum, have a greater overlap with that region than other view regions. - If each interval in a set is contained in their associated view region, the set is *contained* in the view. - A set of intervals *covers* a view if each region in the view is contained by the union of its associated intervals. Conversely, if a set does not cover all of view regions, the interval set will have *gaps* relative to that view (stretches of bases not covered by an interval). Properties of sets of genomic intervals: - A set of genomic intervals may have overlaps or not. If it does not, it is said to be *overlap-free*. - A set of genomic intervals is *tiling* if it: (i) covers the associated view, (ii) is contained in that view, and (iii) is overlap-free. Equivalently, a tiling set of intervals (a) has an initial interval that begins at the start of each region and (b) a final interval that terminates at the end of each region, and (c) every base pair is associated with a unique interval. open2c-bioframe-4fe9b25/docs/guide-intervalops.md000066400000000000000000000375051477525772300220540ustar00rootroot00000000000000--- jupytext: formats: md:myst text_representation: extension: .md format_name: myst format_version: 0.13 jupytext_version: 1.11.3 kernelspec: display_name: Python 3 language: python name: python3 --- # Genomic interval operations ```{eval-rst} This guide provides an introdution into how to use bioframe to perform genomic interval operations. For the full list of genomic interval operations, see the :ref:`API reference`. The following modules are used in this guide: ``` ```{code-cell} ipython3 import itertools import numpy as np import matplotlib import matplotlib.pyplot as plt import pandas as pd import bioframe as bf import bioframe.vis ``` ## DataFrames & BedFrames ```{eval-rst} The core objects in bioframe are pandas DatFrames of genomic intervals, or BedFrames. These can either be defined directly with :py:class:`pandas.DataFrame`: ``` ```{code-cell} ipython3 df1 = pd.DataFrame([ ['chr1', 1, 5], ['chr1', 3, 8], ['chr1', 8, 10], ['chr1', 12, 14]], columns=['chrom', 'start', 'end'] ) ``` ```{eval-rst} Or via functions in :mod:`bioframe.core.construction`, e.g.: ``` ```{code-cell} ipython3 df2 = bioframe.from_any( [['chr1', 4, 8], ['chr1', 10, 11]], name_col='chrom') ``` ```{eval-rst} Or ingested from datasets and databases with functions in :mod:`bioframe.io.fileops` and :mod:`bioframe.io.resources`. ``` ```{eval-rst} BedFrames satisfy the following properties: - chrom, start, end columns - columns have valid dtypes (object/string/categorical, int/pd.Int64Dtype(), int/pd.Int64Dtype()) - for each interval, if any of chrom, start, end are null, then all are null - all starts <= ends. Whether a dataframe satisfies these properties can be checked with :func:`bioframe.core.checks.is_bedframe`: ``` ```{code-cell} ipython3 bioframe.is_bedframe(df2) ``` ```{eval-rst} See :mod:`bioframe.core.checks` for other functions that test properties of BedFrames and :ref:`Technical Notes` for detailed definitions. :func:`bioframe.core.construction.sanitize_bedframe` attempts to modfiy a DataFrame such that it satisfies bedFrame requirements. ``` ```{eval-rst} :py:mod:`bioframe.vis` provides plotting utilities for intervals: ``` ```{code-cell} ipython3 bf.vis.plot_intervals(df1, show_coords=True, xlim=(0,16)) plt.title('bedFrame1 intervals'); bf.vis.plot_intervals(df2, show_coords=True, xlim=(0,16), colors='lightpink') plt.title('bedFrame2 intervals'); ``` ## Overlap ```{eval-rst} Calculating the overlap between two sets of genomic intervals is a crucial genomic interval operation. Using :func:`bioframe.overlap`, we can see the two dataframes defined above, ``df1`` and ``df2``, contain two pairs of overlapping intervals: ``` ```{code-cell} ipython3 overlapping_intervals = bf.overlap(df1, df2, how='inner', suffixes=('_1','_2')) display(overlapping_intervals) ``` ```{code-cell} ipython3 for i, reg_pair in overlapping_intervals.iterrows(): bf.vis.plot_intervals_arr( starts = [reg_pair.start_1,reg_pair.start_2], ends = [reg_pair.end_1,reg_pair.end_2], colors = ['skyblue', 'lightpink'], levels = [2,1], xlim = (0,16), show_coords = True) plt.title(f'overlapping pair #{i}') ``` Note that we passed custom suffixes for the outputs (defaults are ``suffixes=("","_")``), as well as a custom overlap mode (``how='inner'``). The default overlap mode, ``how='left'`` returns each interval in ``df1`` whether or not it overlaps an interval in ``df2``. ```{code-cell} ipython3 overlapping_intervals = bf.overlap(df1, df2) display(overlapping_intervals) ``` ## Cluster ```{eval-rst} It is often useful to find overlapping intervals within a single set of genomic intervals. In `bioframe`, this is achieved with :func:`bioframe.cluster`. This function returns a DataFrame where subsets of overlapping intervals are assigned to the same group, reported in a new column. To demonstrate the usage of :func:`bioframe.cluster`, we use the same ``df1`` as above: ``` ```{code-cell} ipython3 df1 = pd.DataFrame([ ['chr1', 1, 5], ['chr1', 3, 8], ['chr1', 8, 10], ['chr1', 12, 14], ], columns=['chrom', 'start', 'end'] ) bf.vis.plot_intervals(df1, show_coords=True, xlim=(0,16)) ``` Cluster returns a DataFrame where each interval is assigned to a group: ```{code-cell} ipython3 df_annotated = bf.cluster(df1, min_dist=0) display(df_annotated) bf.vis.plot_intervals(df_annotated, labels=df_annotated['cluster'], show_coords=True, xlim=(0,16)) ``` Note that using ``min_dist=0`` and ``min_dist=None`` give different results, as the latter only clusters overlapping intervals and not adjacent intervals: ```{code-cell} ipython3 df_annotated = bf.cluster(df1, min_dist=None) display(df_annotated) bf.vis.plot_intervals(df_annotated, labels=df_annotated['cluster'], show_coords=True, xlim=(0,16)) ``` Extending the minimum distance to two (``min_dist=2``) makes all intervals part of the same cluster "0": ```{code-cell} ipython3 df_annotated = bf.cluster(df1, min_dist=2) display(df_annotated) bf.vis.plot_intervals(df_annotated, labels=df_annotated['cluster'], show_coords=True, xlim=(0,16)) ``` ## Merge ```{eval-rst} Instead of returning cluster assignments, :func:`bioframe.merge` returns a new dataframe of merged genomic intervals. As with :func:`bioframe.cluster`, using ``min_dist=0`` and ``min_dist=None`` gives different results. If ``min_dist=0``, this returns a dataframe of two intervals: ``` ```{code-cell} ipython3 df_merged = bf.merge(df1, min_dist=0) display(df_merged) bf.vis.plot_intervals(df_merged, show_coords=True, xlim=(0,16)) ``` If ``min_dist=None``, this returns a dataframe of three intervals: ```{code-cell} ipython3 df_merged = bf.merge(df1, min_dist=None) display(df_merged) bf.vis.plot_intervals(df_merged, show_coords=True, xlim=(0,16)) ``` ## Closest ```{eval-rst} In genomics, it is often useful not only to find features that overlap, but also features that are nearby along the genome. In bioframe, this is achieved using :func:`bioframe.closest`. ``` ```{code-cell} ipython3 closest_intervals = bf.closest(df1, df2, suffixes=('_1','_2')) display(closest_intervals) ``` ```{code-cell} ipython3 for i, reg_pair in closest_intervals.iterrows(): bf.vis.plot_intervals_arr( starts = [reg_pair.start_1,reg_pair.start_2], ends = [reg_pair.end_1,reg_pair.end_2], colors = ['skyblue', 'lightpink'], levels = [2,1], xlim = (0,16), show_coords = True) plt.title(f'closest pair #{i}') ``` ```{eval-rst} By default, :func:`bioframe.closest` reports overlapping intervals. This can be modified by passing ``ignore_overlap=True``. Note the closest pair #2 and #3, which did not overlap, remain the same: ``` ```{code-cell} ipython3 closest_intervals = bf.closest(df1, df2, ignore_overlaps=True, suffixes=('_1','_2')) for i, reg_pair in closest_intervals.iterrows(): bf.vis.plot_intervals_arr( starts = [reg_pair.start_1,reg_pair.start_2], ends = [reg_pair.end_1,reg_pair.end_2], colors = ['skyblue', 'lightpink'], levels = [2,1], xlim = (0,16), show_coords = True) plt.title(f'closest pair #{i}') ``` ```{eval-rst} Closest intervals within a single DataFrame can be found simply by passing a single dataframe to :func:`bioframe.closest`. The number of closest intervals to report per query interval can be adjusted with ``k``. ``` ```{code-cell} ipython3 bf.closest(df1, k=2) ``` ```{eval-rst} Closest intervals upstream of the features in df1 can be found by ignoring downstream and overlaps. Upstream/downstream direction is defined by genomic coordinates by default (smaller coordinate is upstream). ``` ```{code-cell} ipython3 bf.closest(df1, df2, ignore_overlaps=True, ignore_downstream=True) ``` ```{eval-rst} If the features in df1 have direction (e.g., genes have transcription direction), then the definition of upstream/downstream direction can be changed to the direction of the features by `direction_col`: ``` ```{code-cell} ipython3 df1["strand"] = np.where(np.random.rand(len(df1)) > 0.5, "+", "-") bf.closest(df1, df2, ignore_overlaps=True, ignore_downstream=True, direction_col='strand') ``` ## Coverage & Count Overlaps ```{eval-rst} For two sets of genomic features, it is often useful to calculate the number of basepairs covered and the number of overlapping intervals. While these are fairly straightforward to compute from the output of :func:`bioframe.overlap` with :func:`pandas.groupby` and column renaming, since these are very frequently used, they are provided as core bioframe functions. ``` ```{code-cell} ipython3 df1_coverage = bf.coverage(df1, df2) display(df1_coverage) ``` ```{code-cell} ipython3 df1_coverage_and_count = bf.count_overlaps(df1_coverage, df2) display(df1_coverage_and_count) ``` This plot shows the coverage and number of overlaps for intervals in ``df1`` by ``df2``: ```{code-cell} ipython3 bf.vis.plot_intervals( df1_coverage_and_count, show_coords=True, xlim=(0,16), labels = [f'{cov} bp, {n} intervals' for cov, n in zip(df1_coverage_and_count.coverage, df1_coverage_and_count['count'])]) bf.vis.plot_intervals(df2, show_coords=True, xlim=(0,16), colors='lightpink') ``` ## Subtract & Set Difference ```{eval-rst} Bioframe has two functions for computing differences between sets of intervals: at the level of basepairs and at the level of whole intervals. Basepair-level subtraction is performed with :func:`bioframe.subtract`: ``` ```{code-cell} ipython3 subtracted_intervals = bf.subtract(df1, df2) display(subtracted_intervals) ``` ```{code-cell} ipython3 bf.vis.plot_intervals(subtracted_intervals, show_coords=True, xlim=(0,16)) ``` ```{eval-rst} Interval-level differences are calculated with :func:`bioframe.setdiff`: ``` ```{code-cell} ipython3 setdiff_intervals = bf.setdiff(df1, df2) display(setdiff_intervals) ``` ```{code-cell} ipython3 bf.vis.plot_intervals(setdiff_intervals, show_coords=True, xlim=(0,16)) ``` ## Expand ```{eval-rst} :func:`bioframe.expand` enables quick resizing of intervals. Expand supports additive resizing, with ``pad``. Note that unless subsequently trimmed (with :func:`bioframe.trim`), expanded intervals can have negative values: ``` ```{code-cell} ipython3 expanded_intervals = bf.expand(df1, pad=2) display(expanded_intervals) ``` ```{code-cell} ipython3 bf.vis.plot_intervals(expanded_intervals, show_coords=True, xlim=(0,16)) ``` ```{eval-rst} Expand also supports multiplicative resizing, with ``scale``. Note that ``scale=0`` resizes all intervals to their midpoints: ``` ```{code-cell} ipython3 expanded_intervals = bf.expand(df1, scale=0) display(expanded_intervals) ``` ```{code-cell} ipython3 bf.vis.plot_intervals(expanded_intervals, show_coords=True, xlim=(0,16)) ``` ## Genomic Views ```{eval-rst} Certain interval operations are often used relative to a set of reference intervals, whether those are chromosomes, scaffolds, or sub-intervals of either. Bioframe formalizes this with the concept of a `genomic view`, implemented as pandas dataframes, termed viewFrames, that satisfy the following: - all requirements for bedFrames, including columns for ('chrom', 'start', 'end') - it has an additional column, ``view_name_col``, with default 'name' - entries in the view_name_col are unique - intervals are non-overlapping - it does not contain null values Importanly a `genomic view` specifies a global coordinate axis, i.e. a conversion from a genomic coordinate system to a single axis. See :ref:`Technical Notes` for more details. Bioframe provides a function to assign intervals to corresponding intervals in a view, :func:`bioframe.assign_view`, a function to construct views from various input formats, :func:`bioframe.core.construction.make_viewframe`, and a function check that viewframe requirements are met, :func:`bioframe.core.checks.is_viewframe`. The following genomic interval operations make use of views, though also have useful default behavior if no view is provided: :func:`bioframe.complement`, :func:`bioframe.trim`, :func:`bioframe.sort_bedframe`. ``` ## Complement ```{eval-rst} Equally important to finding which genomic features overlap is finding those that do not. :func:`bioframe.complement` returns a BedFrame of intervals not covered by any intervals in an input BedFrame. Complments are defined relative to a `genomic view`. Here this is provided as a dictionary with a single chromosome of length 15: ``` ```{code-cell} ipython3 df_complemented = bf.complement(df1, view_df={'chr1':15}) display(df_complemented) ``` ```{code-cell} ipython3 bf.vis.plot_intervals(df_complemented, show_coords=True, xlim=(0,16), colors='lightpink') ``` If no view is provided, complement is calculated per unique chromosome in the input with right limits of ``np.iinfo(np.int64).max``. ```{code-cell} ipython3 df_complemented = bf.complement(df1) display(df_complemented) ``` ## Trim ```{eval-rst} Certain regions are often best avoided for genomic analyses. :func:`bioframe.trim` trims intervals to a specified view. Intervals falling outside of view regions have their filled with null values. ``` ```{code-cell} ipython3 view_df = pd.DataFrame( [ ["chr1", 0, 4, "chr1p"], ["chr1", 5, 9, "chr1q"], ["chrX", 0, 50, "chrX"], ["chrM", 0, 10, "chrM"]], columns=["chrom", "start", "end", "name"], ) trimmed_intervals = bf.trim(df1, view_df) display(trimmed_intervals) ``` Note that the last interval of ``df1`` fell beyond 'chr1q' and is now null, and the last interval now ends at 9 instead of 10. ```{code-cell} ipython3 bf.vis.plot_intervals(trimmed_intervals, show_coords=True, xlim=(0,16)) ``` If no view is provided, this function trims intervals at zero to avoid negative values. ## Sorting ```{eval-rst} If no view is provided, :func:`bioframe.sort_bedframe` sorts by ("chrom", "start", "end") columns: ``` ```{code-cell} ipython3 df_unsorted = pd.DataFrame([ ['chrM', 3, 8], ['chrM', 1, 5], ['chrX', 12, 14], ['chrX', 8, 10]], columns=['chrom', 'start', 'end'] ) display( bf.sort_bedframe(df_unsorted) ) ``` Views enable a specifying a sort order on a set of intervals. This flexibility is useful when the desired sorting order is non-lexicographical, e.g. with chrM after autosomes and chrX: ```{code-cell} ipython3 display( bf.sort_bedframe(df_unsorted, view_df) ) ``` ## Selecting & Slicing Since bioFrame operates directly with [pandas](https://pandas.pydata.org/) *DataFrames*, all typical selection and slicing operations are directly relevant. ```{eval-rst} Bioframe also provides a function :func:`bioframe.select` that enables selecting interval subsets using UCSC string format: ``` ```{code-cell} ipython3 display( bioframe.select(df_unsorted,'chrX:8-14') ) ``` ## Flexible column naming +++ Genomic analyses often deal with dataframes with inhomogeneously named columns. Bioframe offers a way to set the default column names that are most convenient for your analyses. Default bedframe column names are stored in ``bioframe.core.specs_rc``. ```{code-cell} ipython3 bf.core.specs._rc ``` If the dataframes we wish to work with have `['CHROMOSOME', 'LEFT', 'RIGHT']`, we can either pass cols to operations in ``bioframe.ops``: ```{code-cell} ipython3 df1_diff_colnames = pd.DataFrame([ ['chr1', 1, 5], ['chr1', 3, 8]], columns=['CHROMOSOME', 'LEFT', 'RIGHT'] ) df2_diff_colnames = pd.DataFrame([ ['chr1', 4, 8], ['chr1', 10, 11]], columns=['CHROMOSOME', 'LEFT', 'RIGHT'] ) ``` ```{code-cell} ipython3 bf.overlap( df1_diff_colnames, df2_diff_colnames, cols1=['CHROMOSOME', 'LEFT', 'RIGHT'], cols2=['CHROMOSOME', 'LEFT', 'RIGHT'], ) ``` Or, we can update the default column names: ```{code-cell} ipython3 with bf.core.specs.update_default_colnames(['CHROMOSOME', 'LEFT', 'RIGHT']): display(bf.overlap( df1_diff_colnames, df2_diff_colnames, )) ``` ```{code-cell} ipython3 # setting colnames back to default. bf.core.specs.update_default_colnames(['chrom', 'start', 'end']) bf.core.specs._rc ``` open2c-bioframe-4fe9b25/docs/guide-io.ipynb000066400000000000000000000326301477525772300206300ustar00rootroot00000000000000{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Reading genomic dataframes" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import bioframe" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Bioframe provides multiple methods to convert data stored in common genomic file formats to pandas dataFrames in `bioframe.io`.\n", "\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Reading tabular text data" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The most common need is to read tablular data, which can be accomplished with `bioframe.read_table`. This function wraps pandas `pandas.read_csv`/`pandas.read_table` (tab-delimited by default), but allows the user to easily pass a **schema** (i.e. list of pre-defined column names) for common genomic interval-based file formats. \n", "\n", "For example, " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df = bioframe.read_table(\n", " \"https://www.encodeproject.org/files/ENCFF001XKR/@@download/ENCFF001XKR.bed.gz\",\n", " schema=\"bed9\",\n", ")\n", "display(df[0:3])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df = bioframe.read_table(\n", " \"https://www.encodeproject.org/files/ENCFF401MQL/@@download/ENCFF401MQL.bed.gz\",\n", " schema=\"narrowPeak\",\n", ")\n", "display(df[0:3])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df = bioframe.read_table(\n", " \"https://www.encodeproject.org/files/ENCFF001VRS/@@download/ENCFF001VRS.bed.gz\",\n", " schema=\"bed12\",\n", ")\n", "display(df[0:3])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The `schema` argument looks up file type from a registry of schemas stored in the `bioframe.SCHEMAS` dictionary:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bioframe.SCHEMAS[\"bed6\"]" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### UCSC Big Binary Indexed files (BigWig, BigBed)\n", "\n", "Bioframe also has convenience functions for reading and writing bigWig and bigBed binary files to and from pandas DataFrames." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bw_url = \"http://genome.ucsc.edu/goldenPath/help/examples/bigWigExample.bw\"\n", "df = bioframe.read_bigwig(bw_url, \"chr21\", start=10_000_000, end=10_010_000)\n", "df.head(5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df[\"value\"] *= 100\n", "df.head(5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "chromsizes = bioframe.fetch_chromsizes(\"hg19\")\n", "# bioframe.to_bigwig(df, chromsizes, 'times100.bw')\n", "\n", "# note: requires UCSC bedGraphToBigWig binary, which can be installed as\n", "# !conda install -y -c bioconda ucsc-bedgraphtobigwig" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bb_url = \"http://genome.ucsc.edu/goldenPath/help/examples/bigBedExample.bb\"\n", "bioframe.read_bigbed(bb_url, \"chr21\", start=48000000).head()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Reading genome assembly information" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The most fundamental information about a genome assembly is its set of chromosome sizes.\n", "\n", " " ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Bioframe provides functions to read chromosome sizes file as `pandas.Series`, with some useful filtering and sorting options:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bioframe.read_chromsizes(\n", " \"https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.chrom.sizes\"\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bioframe.read_chromsizes(\n", " \"https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.chrom.sizes\",\n", " filter_chroms=False,\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dm6_url = \"https://hgdownload.soe.ucsc.edu/goldenPath/dm6/database/chromInfo.txt.gz\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bioframe.read_chromsizes(\n", " dm6_url,\n", " filter_chroms=True,\n", " chrom_patterns=(\"^chr2L$\", \"^chr2R$\", \"^chr3L$\", \"^chr3R$\", \"^chr4$\", \"^chrX$\"),\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bioframe.read_chromsizes(\n", " dm6_url, chrom_patterns=[r\"^chr\\d+L$\", r\"^chr\\d+R$\", \"^chr4$\", \"^chrX$\", \"^chrM$\"]\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Bioframe provides a convenience function to fetch chromosome sizes from UCSC given an assembly name:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "chromsizes = bioframe.fetch_chromsizes(\"hg38\")\n", "chromsizes[-5:]" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Bioframe can also generate a list of centromere positions using information from some UCSC assemblies:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "display(bioframe.fetch_centromeres(\"hg38\")[:3])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "These functions are just wrappers for a UCSC client. Users can also use `UCSCClient` directly:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "client = bioframe.UCSCClient(\"hg38\")\n", "client.fetch_cytoband()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Curated genome assembly build information\n", "\n", "_New in v0.5.0_\n", "\n", "Bioframe also has locally stored information for common genome assembly builds. \n", "\n", "For a given provider and assembly build, this API provides additional sequence metadata:\n", "\n", "* A canonical **name** for every sequence, usually opting for UCSC-style naming.\n", "* A canonical **ordering** of the sequences.\n", "* Each sequence's **length**.\n", "* An **alias dictionary** mapping alternative names or aliases to the canonical sequence name.\n", "* Each sequence is assigned to an assembly **unit**: e.g., primary, non-nuclear, decoy.\n", "* Each sequence is assigned a **role**: e.g., assembled molecule, unlocalized, unplaced." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bioframe.assemblies_available()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "hg38 = bioframe.assembly_info(\"hg38\")\n", "print(hg38.provider, hg38.provider_build)\n", "hg38.seqinfo" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "hg38.chromsizes" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "hg38.alias_dict[\"MT\"]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bioframe.assembly_info(\"hg38\", roles=\"all\").seqinfo" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Contributing metadata for a new assembly build\n", "\n", "To contribute a new assembly build to bioframe's internal metadata registry, make a pull request with the following items:\n", "\n", "1. Add a record to the assembly manifest file located at `bioframe/io/data/_assemblies.yml`. Required fields are as shown in the example below.\n", "2. Create a `seqinfo.tsv` file for the new assembly build and place it in `bioframe/io/data`. Reference the exact file name in the manifest record's `seqinfo` field. The seqinfo is a tab-delimited file with a required header line as shown in the example below.\n", "3. Optionally, a `cytoband.tsv` file adapted from a `cytoBand.txt` file from UCSC.\n", "\n", "Note that we currently do not include sequences with alt or patch roles in seqinfo files.\n", "\n", "#### Example\n", "\n", "Metadata for the mouse mm9 assembly build as provided by UCSC.\n", "\n", "`_assemblies.yml`\n", "\n", "> ```\n", "> ...\n", "> - organism: mus musculus\n", "> provider: ucsc\n", "> provider_build: mm9\n", "> release_year: 2007\n", "> seqinfo: mm9.seqinfo.tsv\n", "> default_roles: [assembled]\n", "> default_units: [primary, non-nuclear]\n", "> url: https://hgdownload.soe.ucsc.edu/goldenPath/mm9/bigZips/\n", "> ...\n", "> ```\n", "\n", "`mm9.seqinfo.tsv`\n", "\n", "> ```\n", "> name\tlength\trole\tmolecule\tunit\taliases\n", "> chr1\t197195432\tassembled\tchr1\tprimary\t1,CM000994.1,NC_000067.5\n", "> chr2\t181748087\tassembled\tchr2\tprimary\t2,CM000995.1,NC_000068.6\n", "> chr3\t159599783\tassembled\tchr3\tprimary\t3,CM000996.1,NC_000069.5\n", "> chr4\t155630120\tassembled\tchr4\tprimary\t4,CM000997.1,NC_000070.5\n", "> chr5\t152537259\tassembled\tchr5\tprimary\t5,CM000998.1,NC_000071.5\n", "> chr6\t149517037\tassembled\tchr6\tprimary\t6,CM000999.1,NC_000072.5\n", "> chr7\t152524553\tassembled\tchr7\tprimary\t7,CM001000.1,NC_000073.5\n", "> chr8\t131738871\tassembled\tchr8\tprimary\t8,CM001001.1,NC_000074.5\n", "> chr9\t124076172\tassembled\tchr9\tprimary\t9,CM001002.1,NC_000075.5\n", "> chr10\t129993255\tassembled\tchr10\tprimary\t10,CM001003.1,NC_000076.5\n", "> chr11\t121843856\tassembled\tchr11\tprimary\t11,CM001004.1,NC_000077.5\n", "> chr12\t121257530\tassembled\tchr12\tprimary\t12,CM001005.1,NC_000078.5\n", "> chr13\t120284312\tassembled\tchr13\tprimary\t13,CM001006.1,NC_000079.5\n", "> chr14\t125194864\tassembled\tchr14\tprimary\t14,CM001007.1,NC_000080.5\n", "> chr15\t103494974\tassembled\tchr15\tprimary\t15,CM001008.1,NC_000081.5\n", "> chr16\t98319150\tassembled\tchr16\tprimary\t16,CM001009.1,NC_000082.5\n", "> chr17\t95272651\tassembled\tchr17\tprimary\t17,CM001010.1,NC_000083.5\n", "> chr18\t90772031\tassembled\tchr18\tprimary\t18,CM001011.1,NC_000084.5\n", "> chr19\t61342430\tassembled\tchr19\tprimary\t19,CM001012.1,NC_000085.5\n", "> chrX\t166650296\tassembled\tchrX\tprimary\tX,CM001013.1,NC_000086.6\n", "> chrY\t15902555\tassembled\tchrY\tprimary\tY,CM001014.1,NC_000087.6\n", "> chrM\t16299\tassembled\tchrM\tnon-nuclear\tMT,AY172335.1,NC_005089.1\n", "> chr1_random\t1231697\tunlocalized\tchr1\tprimary\t\n", "> chr3_random\t41899\tunlocalized\tchr3\tprimary\t\n", "> chr4_random\t160594\tunlocalized\tchr4\tprimary\t\n", "> chr5_random\t357350\tunlocalized\tchr5\tprimary\t\n", "> chr7_random\t362490\tunlocalized\tchr7\tprimary\t\n", "> chr8_random\t849593\tunlocalized\tchr8\tprimary\t\n", "> chr9_random\t449403\tunlocalized\tchr9\tprimary\t\n", "> chr13_random\t400311\tunlocalized\tchr13\tprimary\t\n", "> chr16_random\t3994\tunlocalized\tchr16\tprimary\t\n", "> chr17_random\t628739\tunlocalized\tchr17\tprimary\t\n", "> chrX_random\t1785075\tunlocalized\tchrX\tprimary\t\n", "> chrY_random\t58682461\tunlocalized\tchrY\tprimary\t\n", "> chrUn_random\t5900358\tunplaced\t\tprimary\t\n", "> ```" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Reading other genomic formats" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "See the [docs for File I/O](https://bioframe.readthedocs.io/en/latest/api-fileops.html) for other supported file formats." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.3" } }, "nbformat": 4, "nbformat_minor": 4 } open2c-bioframe-4fe9b25/docs/guide-performance.ipynb000066400000000000000000013327031477525772300225270ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Performance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook illustrates performance of typical use cases for bioframe on sets of randomly generated intervals." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# ! pip install pyranges\n", "## Optional:\n", "# ! conda install -c bioconda bedtools\n", "# ! pip install pybedtools" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import platform\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "import psutil\n", "import pyranges\n", "\n", "import bioframe\n", "\n", "plt.rcParams[\"figure.facecolor\"] = \"white\"\n", "plt.rcParams[\"font.size\"] = 16\n", "\n", "# Note that by default we switch off the demo of pybedtools.\n", "# It runs for minutes for 10^5 intervals\n", "include_pybedtools = False\n", "if include_pybedtools:\n", " import pybedtools\n", "\n", " pybedtools.helpers.set_bedtools_path(\n", " path=\"/usr/bin/\"\n", " ) # Set the path to bedtools CLI" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Bioframe v.0.5.1\n", "PyRanges v.0.0.129\n", "System Platform: Linux-5.19.0-46-generic-x86_64-with-glibc2.35\n", "24 CPUs at 3040 GHz\n" ] } ], "source": [ "print(f\"Bioframe v.{bioframe.__version__}\")\n", "print(f\"PyRanges v.{pyranges.__version__}\")\n", "if include_pybedtools:\n", " print(f\"Pybedtools v.{pybedtools.__version__}\")\n", "\n", "print(f\"System Platform: {platform.platform()}\")\n", "print(f\"{psutil.cpu_count()} CPUs at {psutil.cpu_freq().current:.0f} GHz\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below we define a function to generate random intervals with various properties, returning a dataframe of intervals." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def make_random_intervals(\n", " n=1e5,\n", " n_chroms=1,\n", " max_coord=None,\n", " max_length=10,\n", " sort=False,\n", " categorical_chroms=False,\n", "):\n", " n = int(n)\n", " n_chroms = int(n_chroms)\n", " max_coord = (n // n_chroms) if max_coord is None else int(max_coord)\n", " max_length = int(max_length)\n", "\n", " chroms = np.array([\"chr\" + str(i + 1) for i in range(n_chroms)])[\n", " np.random.randint(0, n_chroms, n)\n", " ]\n", " starts = np.random.randint(0, max_coord, n)\n", " ends = starts + np.random.randint(1, max_length, n)\n", "\n", " df = pd.DataFrame({\"chrom\": chroms, \"start\": starts, \"end\": ends})\n", "\n", " if categorical_chroms:\n", " df[\"chrom\"] = df[\"chrom\"].astype(\"category\")\n", "\n", " if sort:\n", " df = df.sort_values([\"chrom\", \"start\", \"end\"]).reset_index(drop=True)\n", "\n", " return df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overlap" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this chapter we characterize the performance of the key function, `bioframe.overlap`. We show that the speed depends on:\n", "- the number of intervals\n", "- number of intersections (or density of intervals)\n", "- type of overlap (inner, outer, left)\n", "- dtype of chromosomes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### vs number of intervals" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4.92 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "7.13 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "42.3 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "448 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "6.95 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings = {}\n", "for n in [1e2, 1e3, 1e4, 1e5, 1e6]:\n", " df = make_random_intervals(n=n, n_chroms=1)\n", " df2 = make_random_intervals(n=n, n_chroms=1)\n", " timings[n] = %timeit -o -r 1 bioframe.overlap(df, df2)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHCCAYAAAAHCnZ4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABarklEQVR4nO3dd3gU5cLG4d+m90DokNBr6IEAHkAQFBUVLBRFmpSjEBuIx8qHiAVRj0YJFqQKWEBBQRRQsSAIgSAtSA0QekkgjYQkO98fHKIxBMJmk8nuPvd15TpnZ2dmn/Vlw8PsOzMWwzAMRERERFyIm9kBREREREqbCpCIiIi4HBUgERERcTkqQCIiIuJyVIBERETE5agAiYiIiMtRARIRERGXowIkIiIiLsfD7ACuzmq1cvToUQIDA7FYLGbHERERcWiGYZCamkr16tVxcyv8OI8KkMmOHj1KWFiY2TFEREScSmJiIqGhoYU+rwJkssDAQODiQAUFBdltv9nZ2axcuZIePXrg6elpt/2KfWmcHIfGynForBxDSY1TSkoKYWFheX+/FkYFyGSXvvYKCgqyewHy8/MjKChIvwDKMI2T49BYOQ6NlWMo6XG62rQSTYIWERERl6MCJCIiIi5HBcgkMTExhIeHExkZaXYUERERl6MCZJKoqCji4+OJjY01O4qIiIjLUQESERERl6MCJCIiIi5HBUhERERcjgqQSTQJWkRExDwqQCbRJGgRERHzqACJiIhIqcq1GqxPSGLTaQvrE5LItRqlnkG3whAREZFS8932Y0xcGs+xc5mAO3P3bKRasA8T7gjnlmbVSi2HjgCJiIhIqfhu+zFGzYv7X/n5y/FzmYyaF8d324+VWhYVIBERESlxuVaDiUvjudyXXZeWTVwaX2pfh6kAmURngYmIiCvZkJBU4MjP3xnAsXOZbEhIKpU8KkAm0VlgIiLiSk6mFl5+bFmvuFSAREREpMRVDvSx63rFpQIkIiIiJa5dnRACvAs/+dwCVAv2oV2dkFLJowIkIiIiJW5V/HHSsnIu+5zlf/874Y5w3N0sl13H3lSAREREpERtP3KOMZ9tAeCGRpWoFpz/a66qwT68NzCiVK8DpAshioiISIk5kZLJ8DmxnM/O5fqGlZg+uC0Wi4V1e0+y8tf19OjcnuvqVy61Iz+XqACJiIhIiTh/IZcRczZyIiWLBpUDmDqgNR7uF798al8nhDM7DdrXCSn18gP6Csw0ug6QiIg4M6vV4ImFf7DtyDlC/L2YMSSSIB9Ps2PlUQEyia4DJCIizuyt73ezfNtxPN0tvD+wDTUr+JkdKR8VIBEREbGrJZuP8O6PewF49e4WpXZq+7VQARIRERG72XQwmf98sRWAh7rUo0+bUJMTXZ4KkIiIiNjF4eQMHvx4IxdyrPQIr8J/bm5kdqRCqQCJiIhIsaVl5TB89kZOp10gvFoQb/VvhZsJZ3cVlQqQiIiIFEuu1eDRTzaz60QqlQK9mTG0Lf5XuO1FWaACJCIiIsXy6vKd/PjnSbw93PhocFuqBfuaHemqVIBMousAiYiIM/h0wyE+WpMAwJv9WtIyrJy5gYpIBcgkug6QiIg4urX7TvP8ku0AjLmxIbe3qG5yoqJTARIREZFrlnA6nVHz4sixGvRqWZ1Hu9c3O9I1UQESERGRa3IuI5vhs2M5dz6bVmHlmNKnBRZL2T3j63JUgERERKTIsnOtjF6wif2n06ke7MOHg9vg4+ludqxrpgIkIiIiRWIYBi98vYPf9p7Bz8udGUMjqRzoY3Ysm6gAiYiISJHMXnuA+esPYbHAO/e2pkm1ILMj2UwFSERERK5q9a6TTFoWD8AztzbmxvAqJicqHhUgERERuaLdJ1J5ZMFmrAb0axvKyM51zY5UbCpAIiIiUqgzaVkMnxNLWlYO7euE8NKdzR3ujK/LUQEyia4ELSIiZV1WTi4PfryJxKTz1Krgx/sD2+Dl4RzVwTnehQPSlaBFRKQsMwyDZ77cxsaDyQT6eDBjSCTl/b3MjmU3KkAiIiJSwHs/7+PLuCO4u1mYdn8E9SsHmB3JrlSAREREJJ/vth9nyne7AJhwRzidG1QyOZH9qQCJiIhInu1HzjHmsz8AGHxdLQZfV9vUPCVFBUhEREQAOJGSyYg5GzmfnUvnBhX5v9vDzY5UYlSAREREhPMXchk5dyPHUzKpV8mfqQMi8HB33prgvO9MREREisRqNRi3cAtbD5+jvJ8nM4dGEuzraXasEqUCJCIi4uLe/n4332w7hqe7hfcHtqFWBX+zI5U4FSAREREX9tUfR3jnx70AvHxXc9rXrWByotKhAiQiIuKiNh1M5slFWwF48Pq69GsbZnKi0qMCJCIi4oIOJ2fw4McbuZBj5cYmVfjPLY3NjlSqVIBERERcTFpWDiPmbOR02gWaVAsi+t5WuLs5/g1Or4UKkIiIiAvJtRo89slm/jyeSsUAbz4a0hZ/bw+zY5U6FSCT6G7wIiJihsnf7uSHP0/i5eHG9MFtqFHO1+xIplABMonuBi8iIqXts9hDTP81AYA3+rakdc3yJicyjwqQiIiIC1i37wzPLd4OwGPdG9CrZXWTE5lLBUhERMTJHTidzqj5m8ixGtzeohqP39jA7EimUwESERFxYucyshk2J5azGdm0DCvHG31bYrG41hlfl6MCJCIi4qSyc61ELYhj/6l0qgX7MH1QG3w83c2OVSaoAImIiDghwzCYuHQHa/aexs/LnY+GtKVykI/ZscoMFSAREREnNGftAeb9fgiLBd7u34qm1YPNjlSmqACJiIg4mZ92neTFZfEAPHVLY3o0rWpyorJHBUhERMSJ7DmRyiMLNmM1oG+bUB68vq7ZkcokFSAREREncSYti2FzYknNyqFd7RBevqu5zvgqhAqQiIiIE8jKyeWheZtITDpPzRA/3h/UBi8P/TVfGP2XERERcXCGYfDsl9uJPZBMoLcHM4a0JcTfy+xYZZoKkIiIiIN7/+f9fBF3GDcLTL0/ggZVAs2OVOapAImIiDiwFTuOM2XFnwBMuKMpXRpWMjmRY1ABEhERcVDbj5zj8U//wDBgUIdaDPlXbbMjOQwVIBEREQd0MiWTkXM3cj47l84NKjLhjnCzIzkUFSAREREHk5mdy8i5Gzl2LpN6lfyZOiACD3f9lX4t9F/LJDExMYSHhxMZGWl2FBERcSBWq8ETC7ew5fA5yvl5MmNIJMG+nmbHcjgqQCaJiooiPj6e2NhYs6OIiIgDefuHPXyz9Rie7hbeH9iG2hX9zY7kkFSAREREHMRXfxzhnR/2APDync3pULeCyYkclwqQiIiIA4g7lMyTi7YC8O/r69IvMszkRI5NBUhERKSMO3L2PP+eu4kLOVZubFKFp25pbHYkh6cCJCIiUoalZeUwfHYsp9OyaFw1kOh7W+HuphucFpcKkIiISBmVazV4/NPN/Hk8lYoB3swYGom/t4fZsZyCCpCIiEgZ9dp3f/L9zpN4ebjx4eA21Cjna3Ykp6ECJCIiUgZ9FnuID3/ZD8DrfVoQUbO8yYmciwqQiIhIGfP7/jM8t3g7AI92b0DvVjVMTuR8VIBERETKkAOn03lo3iZyrAa3tajG490bmB3JKakAiYiIlBHnzmczfE4sZzOyaRkazJt9W+KmM75KhAqQiIhIGZCTa+XhBXHsO5VOtWAfpg9ui4+nu9mxnJYKkIiISBkwcWk8v+45ja+nO9MHt6VykI/ZkZyaCpCIiIjJ5qw9wMe/H8RigbfvbUWzGsFmR3J6KkAiIiIm+nn3KSYu3QHAf25uzM1Nq5qcyDWoAImIiJhkz4lUHp4fh9WAeyJCeahLXbMjuQwVIBERERMkpV9g+JyNpGbl0K52CK/c3QyLRWd8lRYVIBERkVKWlZPLQx9v4lBSBmEhvrw/qA3eHjrjqzSpAImIiJQiwzB4bvF2NhxIItDbg5lDIgnx9zI7lstRARIRESlFH/yyn0WbDuNmgXcHtKZBlUCzI7kkFSAREZFSsmLHcV777k8A/u/2cLo2qmxyItelAlQMe/fupWfPngQEBFCxYkVGjx5Nenq62bFERKQM2nH0HI9/+geGAQM71GTIv2qbHcmleZgdwFGdO3eObt26Ub16dRYuXEhSUhJjx47lxIkTfPHFF2bHExGRMuRkSiYj5mzkfHYunepXZMIdTXXGl8lUgGz0wQcfcOrUKTZu3EjlyhcPYfr6+nLPPfewadMm2rRpY3JCEREpCzKzcxn58SaOncukbiV/Yu6PwNNdX8CYTSNgo+XLl9OtW7e88gPQq1cvAgICWLZsmYnJRESkrDAMg3ELt7Al8Szl/DyZOSSSYF9Ps2MJTlaAdu3axbvvvsvQoUNp3rw5Hh4eWCwWXnrppSJtv3DhQrp27Ur58uXx9/enZcuWTJkyhezs7ALrxsfH06RJk3zLPDw8aNiwITt37rTL+xEREcf29vd7WLb1GB5uFt67vw21K/qbHUn+x6m+AnvvvfeIjo62advHH3+c6OhoPDw86NatGwEBAfz444889dRTLF26lJUrV+Lr65u3fnJyMuXKlSuwn/Lly5OUlGTrWxARESfx9ZajRP+wB4CX72rGdfUqmJxI/s6pjgA1a9aMcePGMX/+fHbu3MmgQYOKtN2SJUuIjo4mICCA9evXs2LFCr744gv27NlD8+bNWbNmDePHjy/h9CIi4iw2H0pm3MItAIzsXIf+kTVNTiT/5FRHgEaMGJHvsZtb0frdK6+8AsDTTz9NRERE3vKKFSsybdo0OnfuzNSpUxk/fjzBwcHAxSM9Z8+eLbCv5ORkGjRoYOM7EBERR3fk7HlGzt3EhRwr3RtX5ulbm1x9Iyl1TnUEyBZHjhwhNjYWgAEDBhR4vlOnToSFhZGVlcXy5cvzljdp0qTAXJ/c3Fx2795dYG6QiIi4hvSsHEbM2cjptCwaVw0k+r7WuLvpdPeyyOUL0ObNmwEICQmhTp06l12nbdu2+dYF6NmzJ6tXr+bUqVN5y5YuXUpaWhq33XZbCSYWEZGyKNdq8Ninf7DzWAoVA7z4aEhbAryd6osWp+LyI5OQkABAzZqFfz8bFhaWb12ABx98kHfffZfevXszfvx4kpOTGTt2LL17984rTJeTlZVFVlZW3uOUlBQAsrOzL3u2ma0u7cue+xT70zg5Do2V4zBrrF5bsZvvd57Ay8ONaQNaUSXAU39erqCkxqmo+3P5ApSamgqAv3/hpyYGBAQAf5UVgHLlyvHjjz/y6KOP0qdPH3x8fOjbty9vvPHGFV/v1VdfZeLEiQWWr1y5Ej8/P1vewhWtWrXK7vsU+9M4OQ6NleMozbH6/aSFT/a5A9C/djbHtq3l2LZSe3mHZu9xysjIKNJ6di9A58+fZ/fu3YSGhlKhgnOf8tewYUO+++67a9rmmWeeYezYsXmPU1JSCAsLo0ePHgQFBdktW3Z2NqtWreKmm27C01MX3SqrNE6OQ2PlOEp7rNYnJLFowybAIKprXR7vXr/EX9MZlNQ4/f1gxZXYVIB+/fVXFi9ezJAhQ2jZsmXe8gULFvDggw+SkZGBu7s7zz//PP/3f/9ny0uUmsDAQIAr3sQ0LS0NwC4FxdvbG29v7wLLPT09S+SDWlL7FfvSODkOjZXjKI2xOngmnYc/3UJ2rsFtzavxRI/GuGnS8zWx9zgVdV82TYL+8MMPmTp1KjVq1MhblpiYyLBhw0hPTyc4OJicnBwmTpzIzz//bMtLlJratWsDF/MX5tJzl9YVERE5dz6bYbNjOZuRTYvQYN7o21Llx4HYVIDWr19Py5YtqVixYt6yjz/+mAsXLvDCCy+QlJSUV3ymTZtmn6QlpHXr1gCcOXMm3yTnv9u4cSNAvmsEFVdMTAzh4eFERkbabZ8iIlI6cnKtPLwgjn2n0qka5MNHg9vi6+Vudiy5BjYVoNOnTxMaGppv2Y8//oiXl1fe/JbOnTvToUOHfKeOl0WhoaF5JWTBggUFnl+zZg2JiYl4e3vTs2dPu71uVFQU8fHxedcgEhERx/Hisnh+3XMaX093PhrSlspBPmZHkmtkUwFKS0vLd18swzCIjY2lbdu2eWdMwcWvjI4ePVr8lCXs2WefBWDy5MnExcXlLT9z5gyjR48G4OGHH867CrSIiLiuuesOMHfdQQDe6t+KZjX0d4MjsmkSdEhICAcOHMh7vHnzZlJTU/nXv/6Vb73s7Gy8vLyKFfBaxMXF5RUWgH379gHwwQcfsGzZsrzlixcvplq1anmP77zzTh599FHeeecdOnToQPfu3fH39+eHH37g7NmzdOzYkUmTJpXa+xARkbLpl92nmLg0HoD/3NKIW5pVNTmR2MqmAhQZGcm3337LunXruO6664iOjsZisdCtW7d86+3Zsydf0ShpKSkprF+/vsDyw4cPc/jw4bzHf78Q4SXR0dF07NiRmJgY1q5dS3Z2NvXq1ePpp59mzJgxpVrkRESk7Nl7MpWo+XHkWg3ujqjBqC71zI4kxWBTAXrsscdYvnw5nTp1Ijg4mHPnzlG3bl169OiRt87p06fZtm0b9957r93CXk3Xrl0xDMPm7fv160e/fv3smEhERJxBUvoFhs3eSGpWDpG1y/Pq3c2xWHTGlyOzaQ7QjTfeyMyZM6lVqxYXLlygS5cuLF26NN/d1z/++GOsVitdunSxW1hnorPAREQcw4UcKw/N28ShpAzCQnx5f2AbvD10xpejs/lK0EOGDGHIkCGFPv/QQw8xbNiwfJOi5S9RUVFERUWRkpKiydUiImWUYRg8t3gbGxKSCPT2YMaQSCoEFLyYrTieErsXmK+vb74zxURERBzNh7/sZ+Gmw7hZ4N0BrWlYJdDsSGInNn0FJiIi4uxWxZ9g8nd/AjD+9nC6NqpsciKxpyIdAfrn2V3XwmKx8MMPP9i8vYiISGnbcfQcj326GcOA+9vXZOi/apsdSeysSAXop59+uuzySzPg/3nm1d+Xa5a8iIg4kpOpmYycs5GMC7l0rF+BF3o11d9lTqhIBWj16tUFli1ZsoTo6GhatWrF4MGDqVOnDgAHDhxg7ty5bN68mccff5zevXvbN7GTiImJISYmhtzcXLOjiIjI/2Rm5zJy7iaOnsukbkV/pg1og6e7Zos4oyIVoH+eyr5mzRqmTp3Kq6++ylNPPVVg/ccee4wpU6bw3HPPcdddd9knqZPRWWAiImWLYRg8uWgrWxLPEuzryYyhkQT7eZodS0qITbX25ZdfpnHjxpctP5f85z//oXHjxrz88ss2hxMRESkt0T/sYemWo3i4WXh/YBvqVPQ3O5KUIJsK0IYNG2jRosVV12vRogUbNmyw5SVERERKzdItR3n7+z0AvHRnM66rV8HkRFLSbCpAmZmZRbrL+7Fjxy573y0REZGy4o/Es4xbuAWA4Z3qcG+7miYnktJgUwEKDw9nzZo1rF27ttB11q1bxy+//ELTpk1tDiciIlKSjp49z4g5G8nKsdKtcWWe7dnE7EhSSmwqQI888gi5ubnccsstPPfcc8THx3P+/HnOnz/Pzp07ef7557nlllswDIOoqCh7ZxYRESm29Kwchs/ZyOm0LBpVCST63la4u+l0d1dh060wBg8ezKZNm3j33XeZPHkykydPLrCOYRg8/PDDV7xfmCvTafAiIuaxWg0e/+wPdh5LoYK/Fx8NaUugj874ciU2X9wgOjqapUuX0q1bN7y9vTEMA8Mw8PLy4oYbbuDrr7/mnXfesWdWpxIVFUV8fDyxsbFmRxERcTmvrfiTVfEn8HJ348PBbQgL8TM7kpSyYt0M9bbbbuO2224jNzeXM2fOAFChQgXc3d3tEk5ERMTeFm5M5IOf9wMwpU8L2tQKMTmRmMEud4N3d3encmXdJE5ERMq29fvP8OzibQA8fEN97mxdw+REYhZd31tERFzCwTPpPDRvE9m5Bj2bV2XsTQ3NjiQmsvkIUG5uLosWLeL777/nyJEjZGZmXnY93Q1eRETMlpKZzfA5G0nOyKZ5jWDe7NsKN53x5dJsKkDnzp3j5ptvJjY2tsCd4P9Jd9AVEREz5eRaiZofx96TaVQJ8mb64Lb4emmuqquzqQCNHz+eDRs2UKNGDR555BGaNGlCUFCQvbOJiIgU26Rl8fy65zQ+nm58NDiSqsE+ZkeSMsCmArRkyRLKlSvH77//To0amkAmIiJl08frDjBn3UEA3u7fiuahwSYnkrLCpgJ04sQJevToofJTDLoQooiI/eVaDdYnJLHptIWjaw7w+srdADx5cyNuaVbN5HRSlthUgKpUqYKPjw4hFkdUVBRRUVGkpKQQHKx/kYiIFNd3248xcWk8x85lAu6w52L5aV8nhNFd65kbTsocm06Dv+OOO/jtt9/Izs62dx4REZFr9t32Y4yaF/e/8pPfhoQkVuw4bkIqKctsKkATJ07Ew8ODUaNGFXr6u4iISGnItRpMXBrPlc5Jnrg0nlzrlc9aFtdi01dg06ZNo0ePHsyaNYtVq1bRvXt3atasiZtbwT5lsVgYP358sYOKiIhczoaEpMse+bnEAI6dy2RDQhLX1atQesGkTLOpAL3wwgtYLBYMwyAxMZHZs2cXWOfS8ypAIiJSkk6mFu2biKKuJ67BpgI0YcIEe+cQERGxSaUA7yKtVzlQJ+/IX1SARETEYVmtBl9tOXLFdSxA1WAf2tXRXd/lL7oZqoiIOCTDMHhh6Q4+iz2ct+yfN1+69HjCHeG4695f8jc23wz1744fP87hwxf/ANaoUYNq1XSxKRERKTmGYTBp2U7mrjuIxQKv92lJgLf7364DdFHVYB8m3BGuiyBKAcUqQDNmzOD1119nz549+ZY3bNiQJ598kmHDhhUrnDPTlaBFRGxjGAavfbeLmb8lAPDKXc3p0yYUgJvCq7Ju70lW/rqeHp3bc139yjryI5dl81dgI0eO5N///je7d+/GMAzKly9P+fLlMQyDXbt2MXLkSEaOHGnPrE4lKiqK+Ph4YmNjzY4iIuJQ3vp+D+//vA+ASb2bcl+7mnnPubtZaF8nhDYVDdrXCVH5kULZVIAWLlzIjBkzKFeuHG+88QbJycmcPn2a06dPc/bsWd58803Kly/PzJkzWbRokb0zi4iIi3r3hz2888PFbx3G3x7OoOtqmxtIHJZNBeiDDz7Aw8ODVatWMXbs2Hz3sgoKCmLMmDGsWrUKd3d3PvjgA7uFFRER1/X+z/t4c9XF+3s9c2tjhneqY3IicWQ2FaDNmzfTpUsXIiIiCl2ndevWdOnShbi4OJvDiYiIAMxYk8Dkb/8E4ImbGvJgF93cVIrHpgKUnp5O5cqVr7pe5cqVSU9Pt+UlREREAPh43QEmLYsH4NFu9XmkewOTE4kzsKkAVa1alc2bN191vc2bN1OlShVbXkJERIRPNxxi/Fc7AHioSz3G3NTQ5ETiLGwqQDfccAO7du1i8uTJha7z6quvsmvXLrp3725zOBERcV2LNh3mmcXbABjeqQ5P3dIIi0VndYl92HQdoKeffprPPvuM5557jsWLFzN48GDq1Lk4GW3//v3MmTOHuLg4fHx8eOqpp+waWEREnN9XfxzhyUVbMAwYfF0tnr+ticqP2JVNBahRo0YsXLiQ+++/n9jYWDZu3JjvecMwCAoKYv78+TRq1MguQUVExDV8s/UYYz+/WH7uaxfGC3c0VfkRu7P5StC33XYbu3fv5sMPP+Tnn3/myJGLN6OrUaMGXbt2ZeTIkUWaKC0iInLJyh3HeezTzeRaDfq0CeXlO5vjposZSgko1q0wKleuzPPPP8/zzz9vrzwiIuKiVv95kqgFceRYDXq3qs5r97RQ+ZESo7vBi4iI6X7ZfYoH520iO9fgtubVeLNvS93GQkqUTQVox44dvPjii1c8FT4uLo4XX3yRP//80+ZwziwmJobw8HAiIyPNjiIiYqq1e08zcu5GLuRY6RFehbfvbYWHu/59LiXLpj9h06ZN48UXX6RixYqFrlOxYkUmTpzI+++/b3M4Z6aboYqIwIaEJIbP2UhWjpVujSszdUAEnio/Ugps+lP2008/0aJFC8LCwgpdp2bNmrRs2ZIffvjB5nAiIuK8Nh1M5oFZGzifnUvnBhWZdn8EXh4qP1I6bPqTdvjwYerWrXvV9erWrZt3dpiIiMglWxLPMnTmBtIv5PKvehWYPrgtPp7uZscSF2JTAcrJycHN7eqburm5kZmZactLiIiIk9p+5ByDZqwnNSuHdrVD+GiIyo+UPpsKUFhYWJHmrsTGxlK9enVbXkJERJzQn8dTGDRjPSmZOUTULMfMByLx8yrWFVlEbGJTAerWrRuHDh1i2rRpha7z3nvvcfDgQbp162ZzOBERcR57TqRy//T1JGdk0zI0mNnD2hHgrfIj5rCpAI0ZMwYvLy8effRRxowZQ3x8PLm5ueTm5hIfH8+YMWN49NFH8fLyYuzYsfbOLCIiDmb/qTQGfLSeM+kXaFo9iLnD2hPk42l2LHFhNlXvBg0aMGPGDB544AHeeecd3nnnnXzPG4aBh4cH06dPp3HjxnYJKiIijungmXQGTF/PqdQsGlcN5OPh7Qn2U/kRc9l8vuGAAQNYt24dvXr1ws/PD8MwMAwDX19fevfuzdq1axk0aJA9s4qIiIM5nJzBgOnrOZ6SSf3KAcwb0Z4Qfy+zY4kU715gERERLF68GKvVypkzZwCoUKFCkc4QExER53bs3Hnum/47R86ep25FfxaMaE/FAG+zY4kAxSxAl7i5uVGpUiV77EpERJzAiZRMBkxfT2LSeWpV8GPByA5UDvIxO5ZInmIXoPj4eNauXcupU6do2rQpvXr1AsBqtZKTk4OXlw51ioi4klOpWQyY/jsJp9MJLe/LgpEdqBqs8iNli83fVSUmJnLjjTfSvHlzHnzwQZ5//nmWLFmS9/z06dPx9fXVrTBERFxIUvoFBn60nn2n0qkW7MMnIztQo5yv2bFECrCpACUlJdGlSxd+/PFHmjZtyqhRozAMI986/fr1w83Nja+//touQUVEpGw7m3Gx/Ow6kUrlQG8WjOxAWIif2bFELsumAvTaa69x4MABxo0bx5YtW5g6dWqBdcqXL0/z5s1Zs2ZNsUOKiEjZdu58NoNmbCD+WAoVA7xYMLIDdSr6mx1LpFA2FaCvvvqK2rVrM3nyZCwWS6Hr1a1bl6NHj9ocTkREyr7UzGyGztrAtiPnCPH3Yv6IDtSvHGB2LJErsqkAHTx4kIiIiKue7u7l5UVSUpJNwUREpOxLz8ph2OxYNh86S7CvJ/OGt6dR1UCzY4lclU0FyMfHh9TU1Kuud+jQIYKDg215CRERKePOX8hl+JxYYg8kE+jjwbzh7QmvHmR2LJEisakANW7cmLi4ONLT0wtd5/Tp02zZsoUWLVrYHM6ZxcTEEB4eTmRkpNlRRESuWWZ2Lv/+eCO/708iwNuDucPa0TxU/+AVx2FTAerTpw9nzpxh7NixWK3Wy67z5JNPkpGRQf/+/YsV0FlFRUURHx9PbGys2VFERK5JVk4uo+Zt4tc9p/HzcmfWA5G0rlne7Fgi18SmCyFGRUUxZ84cPvroIzZt2sTdd98NwL59+/jvf//LwoUL2bBhA61atWLo0KH2zCsiIia6kGMlav5mVu86hY+nGzOGRBJZO8TsWCLXzKYC5OPjw4oVK+jbty9r165l8+bNAKxZs4Y1a9ZgGAaRkZEsWbIET0/d8VdExBnk5Fp57NPNfL/zBF4ebnw0OJLr6lUwO5aITWy+FUa1atVYs2YNK1as4JtvvmH//v1YrVbCwsK49dZb6d279xVPkRcREceRazUY8/kWvt1+HC93Nz4c1IZODSqaHUvEZsW+F9jNN9/MzTffbI8sIiJSBlmtBk8u2sLSLUfxcLMw7f4IujaqbHYskWKx+V5gIiLi/KxWg2cXb+PLuCO4u1l4977W3BhexexYIsVmUwE6e/YsW7duJTk5Od/yEydO8MADD9C6dWvuuusutm7dapeQIiJS+gzD4P++3s6nsYm4WeCt/q24tXk1s2OJ2IVNBejVV1+ldevWJCQk5C3Lzs6mU6dOzJ07ly1btvDVV19xww036FYYIiIOyDAMXlwWz7zfD2GxwBt9W9KrZXWzY4nYjU0FaPXq1dSqVYuIiIi8ZQsXLmTfvn1cd911LFmyhOHDh5OcnMy0adPsFlZEREqeYRi8+u2fzPrtAACv3d2CuyNCzQ0lYmc2FaDExEQaNGiQb9myZcuwWCzMnDmTXr16MX36dGrVqsU333xjl6AiIlI63ly5mw9/2Q/AS3c2o19kmMmJROzPpgKUlJREpUqV8i1bt24ddevWpWHDhnnLIiIiSExMLF5CEREpNe/8sIepq/cCMOGOcAZ2qGVyIpGSYVMB8vb25uzZs3mPjx8/zsGDB+nUqVO+9Xx9fTl//nyxAoqISOmY9tNe/rtqNwDP9WzCAx3rmJxIpOTYVIAaNmzIb7/9RkZGBgBffvklFoulQAE6evQolSvrWhEiImXdR7/uZ8p3uwB48uZGjLy+rsmJREqWTQWof//+nDt3ji5dujBmzBiefvppvL296dWrV946OTk5xMXFFZgrJCIiZcuctQd46ZudADx+YwOibqhvciKRkmfTlaAfe+wxVqxYwY8//simTZtwd3fn7bffzjcvaNWqVaSkpNC5c2e7hRUREfuav/4gE77eAcDorvV4rLv+0SquwaYC5OXlxapVq1izZg0nTpwgIiKCunXzHy718fHhrbfeyndUSEREyo7PNyby3OLtAIzsXIcnb26keziKy7D5XmAWi+WKR3duuOEGbrjhBlt3LyIiJWjx5sM89cXFq/UP/Vdtnu3ZROVHXIruBSYi4mKWbT3KE59vwTDg/vY1mXBHuMqPuBwVIBERF/Ld9uM89ukfWA3o1zaUSb2bqfyIS1IBEhFxEd/Hn+CRT+LItRrc3boGr97dAjc3lR9xTSpAIiIu4KddJxk9P47sXIPbW1RjSp8WuKv8iAtTASqGvXv38tBDDxEREYGnpye1a9c2O5KISAG/7T3Ngx9v4kKulVuaVuWt/q3wcNevf3FtNp8FJrBjxw6WLVtGu3btMAyD5ORksyOJiOTz+/4zDJ8TS1aOlRubVOad+1rjqfIjoiNAxXHHHXdw+PBhvvzyS9q3b292HBGRfDYeSGLY7Fgys610aViJmPsj8PLQr30RUAEqFjc3/ecTkbLpj8SzDJ0VS8aFXDrVr8gHg9rg7eFudiyRMqPE/gY/dOgQx44dK9Y+du3axbvvvsvQoUNp3rw5Hh4eWCwWXnrppSJtv3DhQrp27Ur58uXx9/enZcuWTJkyhezs7GLlEhEpy7YfOcegGetJy8qhfZ0Qpg9ui4+nyo/I35XYHKA6deoAcMsttzB58mSaN29+zft47733iI6Otun1H3/8caKjo/Hw8KBbt24EBATw448/8tRTT7F06VJWrlyJr6+vTfsWESmrdh5LYeCM9aRm5tC2VnlmDo3E10vlR+SfSuwIkGEYGIbBt99+S+vWrRkyZMg176NZs2aMGzeO+fPns3PnTgYNGlSk7ZYsWUJ0dDQBAQGsX7+eFStW8MUXX7Bnzx6aN2/OmjVrGD9+fL5tZs+ejcViuerPokWLrvl9iIiUht0nUrn/o/WczcimVVg5Zj0Qib+3znURuZwS+2QkJCRgtVrZtGkTK1as4Pvvv7/mfYwYMSLf46LOuXnllVcAePrpp4mIiMhbXrFiRaZNm0bnzp2ZOnUq48ePJzg4GIC77rqLDh06XHXfNWrUKGp8EZFSs+9UGgOmrycp/QLNagQxZ1g7An08zY4lUmaVWAGqVasWcPGrsD59+pTUyxRw5MgRYmNjARgwYECB5zt16kRYWBiJiYksX76c++67D4Dg4OC8MiQi4kgOnE5nwPTfOZ2WRZNqQcwb3p5gX5UfkStxumOjmzdvBiAkJCRvHtI/tW3blsTERDZv3pxXgEpLVlYWWVlZeY9TUlIAyM7Otuvk7Ev70oTvsk3j5DjK6lgdTj7PgBmxnEjJokFlf2YNicDf01LmcpamsjpWkl9JjVNR92eXAnThwgXOnDmDt7c3ISEh9tilzRISEgCoWbNmoeuEhYXlW9dWGRkZLF++HID9+/eTkZGRN0coMjIy7yjY37366qtMnDixwPKVK1fi5+dXrDyXs2rVKrvvU+xP4+Q4ytJYJWfBOzvcScqyUNnHYHDYOdb/fO3TDZxVWRorKZy9xykjI6NI6xWrAM2bN4933nmHzZs3Y7VaGTJkCDNnzgRg8eLFLFy4kJdffrnQIzElITU1FQB/f/9C1wkICAD+Ovpiq5MnT9K3b998yy49njVrFkOHDi2wzTPPPMPYsWPzHqekpBAWFkaPHj0ICgoqVp6/y87OZtWqVdx00014eupQeFmlcXIcZW2sjqdkcv+MWJKyzlMrxI/5w9tSJcjH7FhlQlkbK7m8khqnov7dbnMBGjFiBLNmzcIwDAICAkhLS8v3fMOGDfn000+JiIhg3Lhxtr5MmVa7dm0Mw7imbby9vfH29i6w3NPTs0Q+qCW1X7EvjZPjKAtjdTI1kyGzN3Eo6TxhIb588u8OVC+ny3r8U1kYK7k6e49TUfdl02nw8+fPZ+bMmTRr1ozY2FjOnTtXYJ2mTZsSGhrKt99+a8tL2CwwMBCA9PT0Qte5VNbsecRFRKQ0nEnL4v7p69l/Kp3qwT4sGKHyI2ILm44AffjhhwQEBLBs2bK8+TSX07x5c3bu3GlzOFtcuiN7YmJioetcek53bxcRR5KcfoH7P1rPnpNpVAny5pN/dyAsxP5zB0VcgU1HgLZs2UL79u2vWH7g4plYJ06csCmYrVq3bg3AmTNnCp3kvHHjRoB81wgqbTExMYSHhxMZGWlaBhFxHOfOZzNo5nr+PJ5KxQBvFozsQK0Khc91FJErs6kAZWVlFemaOadOncLdvXQvwR4aGppXKhYsWFDg+TVr1pCYmIi3tzc9e/Ys1Wx/FxUVRXx8fN41i0RECpOamc3gmRvYfiSFCv5efDKyPfUqBZgdS8Sh2VSAatSocdWvtgzDID4+vlTPALvk2WefBWDy5MnExcXlLT9z5gyjR48G4OGHH9aFD0WkzEvPymHorFi2JJ6lnJ8n80a0p0GVQLNjiTg8mwpQ9+7d+fPPP/nqq68KXefjjz/m8OHD3HTTTTaHi4uLo0OHDnk/33zzDQAffPBBvuX/vOv8nXfeyaOPPkpaWhodOnTg1ltvpU+fPtSvX59t27bRsWNHJk2aZHMuEZHSkHEhhwdmx7LpYDJBPh7MG96eJtV08oaIPdg0CXrcuHF8/PHHDBgwgJdffpl+/frlPZeUlMTnn3/OuHHj8Pf359FHH7U5XEpKCuvXry+w/PDhwxw+fDjv8d+vrHxJdHQ0HTt2JCYmhrVr15KdnU29evV4+umnGTNmDF5eXjbnEhEpaZnZuYycu5ENCUkEenvw8fD2NKuho9Yi9mJTAWrQoAFz5sxh8ODBPPHEEzzxxBNYLBbmzJnDnDlzgIvn4c+fP/+KV2S+mq5du17zdXb+rl+/fvnKmYiII8jKyeXBjzfx294z+Hu5M3tYJC3DypkdS8Sp2PQVGFy84nFsbCx9+/YlMDAQwzAwDAMfHx/uuOMO1q1bxz333GPPrE5FZ4GJyOVcyLESNT+On3efwtfTnZlDI2lTy9xbDIk4o2LdCqNZs2Z8+umnGIbBmTNnsFqtVKxYETc3m3uVy4iKiiIqKoqUlBRNxhYRALJzrTzySRzf7zyJt4cbHw1pS/u6FcyOJeKU7HIzVIvFQsWKFe2xKxERl5STa2XMZ3+wYscJvNzd+HBwWzrW1+9VkZKiQzUiIibLtRo8uWgry7Yew9PdwnsDI+jSsJLZsUScms1HgHJycli4cCE//PADR48eJTMz87LrWSwWfvjhB5sDiog4M6vV4OkvtrJ48xE83CxMHRBB9yZVzI4l4vRsKkCnTp2iR48ebN269apnaVksFpuCiYg4O8MweP6r7SzcdBg3C0Tf25qbm1Y1O5aIS7CpAP3nP/9hy5Yt1K9fn1GjRtGgQYO8u7BL0cTExBATE0Nubq7ZUUTEBIZhMHFpPAvWH8Jigf/2a8VtLaqZHUvEZdhUgJYtW0aVKlX4/fffCQnR6Zm20FlgIq7LMAxe/mYns9ceAGDKPS24s3UNc0OJuBibJkGfP3+ejh07qvyIiFwjwzCYsmIXH61JAOCVu5rTt22YyalEXI9NBahBgwacP3/e3llERJze29/v4b2f9gHwYu+mDGhv+9XyRcR2NhWg4cOH89NPP+W7H5eIiFxZzOq9RP+wB4Dnb2vC4OtqmxtIxIXZVIAefvhhbr/9drp168aKFSuwWq32ziUi4lQ+/GUfr6/YBcBTtzRmROe6JicScW02Xwfogw8+oEuXLvTs2RMPDw+qVat22VtgWCwW9u3bV6yQIiKObNZvCbyy/E8Axt7UkFFd65mcSERsKkCJiYl07tyZxMREDMMgOzubQ4cOXXZdXQfo8nQavIhr+Pj3g0xcGg/AI93q82j3BiYnEhGwsQA99dRTHDp0iE6dOjF27FgaNGhAQECAvbM5NZ0GL+L8Pos9xPgl2wF4sEtdxt7U0OREInKJTQXo+++/p1atWqxatQpvb297ZxIRcXhfbDrM019uA2BYxzo8fUtjHREXKUNsvg5Qu3btVH5ERC7j6y1HeXLRFgwDBnWoxfjbm6j8iJQxNhWg8PBwkpKS7J1FRMThfbvtGGM++wOrAfdGhjGxV1OVH5EyyKYC9Mgjj/Dzzz+zfft2e+cREXFYq+JP8Mgnm8m1GtwTEcordzXHzU3lR6QssqkADRw4kHHjxtGtWzc++OCDQs8AExFxFav/PMno+ZvIsRr0blWdKX1aqPyIlGE2TYJ2d3fP+/+jR4++4roWi4WcnBxbXkZExCH8uucUD87bRHauQc/mVXmzb0vcVX5EyjSbjgAZhlHkH10l+vJiYmIIDw8nMjLS7CgiUgzr9p1h5NyNXMixclN4FaLvbY2Hu02/WkWkFNn0KbVardf0IwVFRUURHx9PbGys2VFExEaxB5IYPieWzGwrNzSqxNQBrfFU+RFxCPqkiojYIO5QMg/MiiXjQi6dG1TkvYFt8PZwv/qGIlIm2HwvMBERV5FrNVifkMSm0xYqJCTh7+PFkJkbSMvK4bq6FfhwUFt8PFV+RByJCpCIyBV8t/0YE5fGc+xcJuDO3D0bsQAG0K52CDOGtsXXS+VHxNEUqQDVrVsXi8XC999/T506dahbt26RX0B3gxcRR/Xd9mOMmheH8Y/llx7f174mfl76d6SIIyrSJ/fAgQNYLBays7PzHheVroAqIo4o12owcWl8gfJziQWY8t2f9GpZXae8izigIhWghIQEAGrUqJHvsYiIs9qQkPS/r70uzwCOnctkQ0IS19WrUHrBRMQuilSAatWqdcXHIiLO5mRq4eXHlvVEpGyx6TT4X375hd27d191vT179vDLL7/Y8hIiIqYK8vEs0nqVA31KOImIlASbClDXrl157bXXrrrelClTuOGGG2x5CRER0+w9mcpL38RfcR0LUC3Yh3Z1QkonlIjYlc0XQjSMwqYGSlHoVhgiZdPSLUfpNfU39p1KJ9j34iyBf05xvvR4wh3hmgAt4qBK9ErQycnJ+Pjo8PDl6FYYImXLhRwrE5fu4JFPNpNxIZfr6lbg+7FdeX9gBFWD8/8eqxrsw3sDI7ilWTWT0opIcRX5AhaHDh3K9zgtLa3AsktycnLYsWMHK1eupF69esVLKCJSwo6fyyRqQRybDiYDMKprPZ64qSEe7m7c0qwaN4VXZd3ek6z8dT09OrfnuvqVdeRHxMEVuQDVrl073zV9vvjiC7744osrbmMYBgMHDrQ9nYhICVu79zSPfLKZM+kXCPTx4M2+LenRtGq+ddzdLLSvE8KZnQbt64So/Ig4gSIXoJo1a+YVoEOHDuHn50fFihUvu66XlxehoaHcc889jBo1yj5JRUTsyGo1eP+XfbyxYhdWAxpXDeT9gW2oXdHf7GgiUgqKXID+fvVnNzc3+vbty8yZM0sik4hIiTp3PpsnPt/C9ztPAHBPRCgv3dlM9/QScSE23cRm1qxZ1K9f395ZRERK3I6j5xg1L45DSRl4ubsxsXdT7o0M0217RFyMTQVoyJAh9s4hIlLiFm5M5Pkl28nKsVKjnC/vDYygRWg5s2OJiAl0G2MRcXqZ2blMXLqDTzYkAtC1USXe7t+Kcn5eJicTEbOoAImIU0tMymDU/E1sP5KCxQJjbmzIwzfUx01ncom4NBUgEXFaq/88yeOf/cG589mU9/Mk+t7WXN+wktmxRKQMUAESEaeTazWI/n437/y4F4CWYeWYdn8ENcr5mpxMRMoKFSARcSpJ6Rd47NPN/LrnNACDOtTi+dub4O2hU9xF5C8qQCaJiYkhJiaG3Nxcs6OIOI3Nh5KJmh/H0XOZ+Hi68erdzbmrdajZsUSkDFIBMklUVBRRUVGkpKQQHBxsdhwRh2YYBvN+P8iLy+LJzjWoU9Gf9wZG0LhqkNnRRKSMUgESEYeWcSGHZ7/cxpI/jgJwS9OqvN63BYE+niYnE5GyTAVIRBzW/lNpPDRvE7tPpOHuZuHpWxozonMdXdVZRK5KBUhEHNK3247x5KKtpGXlUCnQm6n3taZ93QpmxxIRB6ECJCIOJTvXypTv/mT6rwkAtKsdwtQBrakc5GNyMhFxJCpAIuIwTqZk8vCCzWw4kATAv6+vy5M3N8LT3c3kZCLiaFSARMQhrN9/hqgFmzmdlkWAtwdv9G3BLc2qmR1LRByUCpCIlGmGYTD91/289t0ucq0GjaoE8t7ACOpWCjA7mog4MBUgESmzUjKz+c/CrXy34zgAd7Wuwct3NcPPS7+6RKR49FtERMqkP4+nMGpeHAmn0/F0t/B/dzRlYPuaOsVdROxCBUhEypzFmw/zzJfbyMy2Uj3Yh2kD29AqrJzZsUTEiagAiUiZkZWTy6Rl8cz7/RAAnRtUJPre1oT4e5mcTEScjQqQiJQJR86eZ/S8TWw5fA6AR7s34LHuDXB301deImJ/KkAiYrqfd5/i8U83k5yRTbCvJ2/3b8UNjSubHUtEnJgKkIiYxmo1ePfHvbz9w24MA5rXCGba/RGEhfiZHU1EnJwKkIiYIjn9AmM+/4Ofdp0C4L52NZlwRzg+nu4mJxMRV6ACJCKlbuvhs4yaF8eRs+fx9nDjpTub0bdtmNmxRMSFqACJSKkxDINPNiTywtc7uJBrpVYFP967vw3h1YPMjiYiLkYFyCQxMTHExMSQm5trdhSRUnH+Qi7PL9nOF3GHAbixSRXe7NeSYF9Pk5OJiCtSATJJVFQUUVFRpKSkEBwcbHYckRJ14HQ6D83bxJ/HU3GzwJM3N+bB6+viplPcRcQkKkAiUqJW7jjOE59vITUrh4oBXrxzX2v+Va+i2bFExMWpAIlIicjJtfLGyt28//M+ANrUKk/MgAiqBvuYnExERAVIRErAqdQsHvkkjt/3JwEwrGMdnunZGE93N5OTiYhcpAIkIna18UASo+fHcTI1C38vd17r04LbW1Q3O5aISD4qQCJiF4ZhMPO3A7y6fCc5VoP6lQN4f2AE9SsHmh1NRKQAFSARKba0rByeWrSVb7YdA+COltWZfHdz/L31K0ZEyib9dhKRYtlzIpUH521i/6l0PNwsPH9bE4b8qzYWi05xF5GySwVIRGz21R9HeObLbWRcyKVqkA8x90fQplZ5s2OJiFyVCpCIXLMLOVZeWb6T2WsPAPCvehV4577WVAzwNjeYiEgRqQCJyDU5du48o+fHsfnQWQCibqjH2Jsa4a6rOouIA1EBEpEi+23vaR75ZDNJ6RcI9PHgrX6tuDG8itmxRESumQqQiFyV1Wrw3s/7eHPlLqwGhFcL4v2BbahZwc/saCIiNlEBEpErOpeRzRML/+D7nScB6Nc2lBd7N8PH093kZCIitlMBEpFC7Th6jlHz4jiUlIGXhxuTejelf2RNs2OJiBSbCpCIXNbnGxMZv2Q7WTlWwkJ8ee/+NjSrEWx2LBERu1ABEpF8MrNzeeHrHXwamwhAt8aVeatfK4L9PE1OJiJiPypAIpInMSmDUfM3sf1IChYLPHFTQ0Z3rY+bTnEXESejAiQiAPz45wke//QPUjJzCPH3IvreVnRuUMnsWCIiJUIFSMTF5VoN3v5+N+/+uBeAVmHlmHZ/BNXL+ZqcTESk5LiZHcCRLVq0iLvuuouaNWvi5+dH06ZNefPNN8nOzjY7mkiRnEnLYsjMDXnlZ8h1tfj8wetUfkTE6ekIUDG88cYb1K5dmylTplClShXWrl3L888/z9atW5kzZ47Z8USuKO5QMlHz4zh2LhNfT3cm39Oc3q1qmB1LRKRUqAAVw9KlS6lU6a85EjfccAOGYTB+/Pi8UiRS1hiGwce/H2TSsniycw3qVvTn/UFtaFgl0OxoIiKlRgWoGP5efi5p06YNAEePHlUBkjIn40IOz3y5ja/+OApAz+ZVee2eFgT66BR3EXEtZXoO0K5du3j33XcZOnQozZs3x8PDA4vFwksvvVSk7RcuXEjXrl0pX748/v7+tGzZkilTppToHJ1ffvkFLy8v6tWrV2KvIWKLfafSuDPmN7764yjubhaev60JMQMiVH5ExCWV6SNA7733HtHR0TZt+/jjjxMdHY2HhwfdunUjICCAH3/8kaeeeoqlS5eycuVKfH3tO9EzPj6e6Oho/v3vfxMUFGTXfYsUx/Jtx3hy4RbSL+RSOdCbqQMiaFcnxOxYIiKmKdNHgJo1a8a4ceOYP38+O3fuZNCgQUXabsmSJURHRxMQEMD69etZsWIFX3zxBXv27KF58+asWbOG8ePH59tm9uzZWCyWq/4sWrTosq95+vRp7rzzTurXr8/kyZOL/d5F7CE718pLy+IZPT+O9Au5tK8TwrJHO6n8iIjLK9NHgEaMGJHvsZtb0fraK6+8AsDTTz9NRERE3vKKFSsybdo0OnfuzNSpUxk/fjzBwRfvbXTXXXfRoUOHq+67Ro2CZ8mkpqZy6623cuHCBX766Sf8/f2LlFOkJJ1IyeThBXHEHkgG4MEudXmyRyM83Mv0v3tEREpFmS5Atjhy5AixsbEADBgwoMDznTp1IiwsjMTERJYvX859990HQHBwcF4ZuhZZWVn07t2bAwcOsGbNGqpXr168NyBiB7/vP8PDCzZzOi2LQG8PXu/bkluaVTU7lohImeF0/xTcvHkzACEhIdSpU+ey67Rt2zbfurbKzc3l3nvvJTY2luXLl9OoUaNi7U+kuAzD4IOf93H/R+s5nZZF46qBfP1IJ5UfEZF/cLojQAkJCQDUrFmz0HXCwsLyrWurqKgolixZwqRJk8jNzeX333/Pey48PPyyE6GzsrLIysrKe5ySkgJAdna2Xc9Ou7QvXZW6bLPnOKVmZvPUlztYtfMkAHe2rMaLvcLx9XLXnwM70GfKcWisHENJjVNR9+d0BSg1NRXgivNwAgICgL/Kh62+++47AMaPH19gUvXq1avp2rVrgW1effVVJk6cWGD5ypUr8fPzK1aey1m1apXd9yn2V9xxOpIOM3e7czrTgrvF4J46Vv7lm8jq7xPtlFAu0WfKcWisHIO9xykjI6NI6zldASpNBw4cuOZtnnnmGcaOHZv3OCUlhbCwMHr06GHXU+ezs7NZtWoVN910E56eus5LWWWPcVryx1He+TqezGwr1YN9ePfelrQIvfb5bHJl+kw5Do2VYyipcSrqwQ2nK0CBgRcv55+enl7oOmlpaQCmXKvH29sbb2/vAss9PT1L5INaUvsV+7JlnLJycnlxaTzz1x8C4PqGlYju34ry/l4lEVH+R58px6Gxcgz2Hqei7svpClDt2rUBSEws/ND/pecurSviaA4nZzB6fhxbD5/DYoHHujfgkW4NcHezmB1NRMQhOF0Bat26NQBnzpwhISHhsmeCbdy4ESDfNYJEHMVPu07y+Gd/cDYjm3J+nrzdvxVdG1U2O5aIiENxutPgQ0NDiYyMBGDBggUFnl+zZg2JiYl4e3vTs2fP0o6XJyYmhvDw8LysIldjtRq8/f1uHpgdy9mMbFqEBrPskU4qPyIiNnC6AgTw7LPPAjB58mTi4uLylp85c4bRo0cD8PDDD9t04UN7iYqKIj4+Pu+ijSJXkpx+gQdmx/L293swDLi/fU0WPnQdoeXtf+agiIgrKNNfgcXFxeUVFoB9+/YB8MEHH7Bs2bK85YsXL6ZatWp5j++8804effRR3nnnHTp06ED37t3x9/fnhx9+4OzZs3Ts2JFJkyaV3hsRKYYtiWcZPT+OI2fP4+Ppxst3NueeNqFmxxIRcWhlugClpKSwfv36AssPHz7M4cOH8x7//cKCl0RHR9OxY0diYmJYu3Yt2dnZ1KtXj6effpoxY8bg5aUzZaRsMwyDBRsOMfHreC7kWqldwY/3BrahSbXSP3tRRMTZlOkC1LVrVwzDsHn7fv360a9fPzsmEikd5y/k8tySbXwZdwSAHuFVeKNfS4J8dEqviIg9lOkC5MxiYmKIiYkhNzfX7ChSxiScTmfUvE38eTwVNws8dUtj/n19XSwWneIuImIvTjkJ2hFoErTkWg3WJySx6bSF9QlJ5FoNVuw4Tq931/Dn8VQqBngzf0QHHuxST+VHRMTOdARIxATfbT/GxKXxHDuXCbgzd89G/L3cSb9w8YhgZO3yTB0QQZUgH3ODiog4KRUgkVL23fZjjJoXxz9nt10qP90bV+b9QW3wdNcBWhGRkqLfsCKlKNdqMHFpfIHy83fxx1Jw01deIiIlSkeAREqIYRgcT8lk78k09p5MY8/JNOIOJv/va6/CHTuXyYaEJK6rV6GUkoqIuB4VIJPoLDDnkWs1OJSUkVd0Lv6ksu9UOmlZOTbt82TqlUuSiIgUjwqQSaKiooiKiiIlJcXUW3JI0WXl5JJwOv3i0ZwTaew9lca+k2nsP53OhRzrZbfxcLNQq4If9SsHUL9yAAAxq/dd9bUqB2rys4hISVIBEvmHtKycAkdz9p5M41BSBtZCJu/4eLpRt2IADaoEUL9SQF7hqVXBHy+Pv6ba5VoNvow7wvFzmZedB2QBqgb70K5OSIm8NxERuUgFSFzWmbQs9vyt6Ow7dfF/rzRHJ8jHI6/c1K8cQIPKgdSvHECNcr64uV194rK7m4UJd4Qzal4cFshXgi5tPeGOcNyLsC8REbGdCpA4NcMwOHous8DRnL0n00jOyC50u0qB3tSv9L8jOpX/OqpTKdC72BclvKVZNd4bGPG36wBdVDXYhwl3hHNLs2pX2FpEROxBBUicQk6ulYN/m4i87+TFOTp7T6aRceHyE80tFggt75tXbhpUDqTe/8pOsF/J3nPrlmbVuCm8Kuv2nmTlr+vp0bk919WvrCM/IiKlRAVIHEpmdi77T6VfLDcnUvNKzoHTGVzILXwicu2K/jT421dX9Spd/PH1ci/ld/AXdzcL7euEcGanQfs6ISo/IiKlSAVIyqSUzOx8R3MuzdVJTM7AKGQisq+nO/Uq+//vq6tA6lW6NBHZT1dVFhGRfFSATKLrAF2cn3M67UL+uTn/O6JzIiWr0O2CfT3zH82pHECDygFUDy7aRGQREREVIJO40nWArFaDI2fP510359I1dPaeTOPc+cInIlcJ8v5rAnKVwLy5OhUDvHR3dBERKRYVILGb7FwrB8+k57uGzp6Taew/lc757MInItcM8csrN5eO5tSrHECQT8lORBYREdelAiTX7PyFXPadunjdnD0n0vK+ujpwOp2cQq4U6OluoU5F//99bRWYd2SnbiV/fDzNm4gsIiKuSQXICeVaDdYnJLHptIUKCUk2n159LiObvadS8x3N2XsyjSNnzxc6EdnPyz2v3NTLu1hgADVD/PDQRGQRESkjVICczHfbj/3tAnvuzN2zkWpXuMCeYRicSs1/ReRLR3ROpRY+Ebm8n2f+ozn/+6kW5KOJyCIiUuapADmR77YfY9S8uAL3mDp+LpNR8+J4sXczapT3yXczz70n00jNLPyO5dWCffKum3PpaE79ygFUCPAu2TcjIiJSglSAnESu1WDi0vjL3mDz0rLxX22/7LZulyYi/+OITr1K/gRqIrKIiDghFSCT2Ps6QBsSkq54E89Lwsr70iKs3F+3f6gSQO0KmogsIiKuRQXIJPa+DtDJ1KuXH4BxNzeid6saxX49ERERR6bTcpxE5UAfu64nIiLizFSAnES7OiFUC/ahsPOvLFyc0NyuTkhpxhIRESmTVICchLubhQl3hAMUKEGXHk+4I1x3HBcREUEFyKnc0qwa7w2MoGpw/q+5qgb78N7AiMteB0hERMQVaRK0k7mlWTVuCq/Kur0nWfnrenp0bm/zlaBFRESclQqQE3J3s9C+Tghndhq0rxOi8iMiIvIP+gpMREREXI4KkIiIiLgcFSCTxMTEEB4eTmRkpNlRREREXI4KkEmioqKIj48nNjbW7CgiIiIuRwVIREREXI4KkIiIiLgcFSARERFxOSpAIiIi4nJUgERERMTl6ErQJjMMA4CUlBS77jc7O5uMjAxSUlLw9PS0677FfjROjkNj5Tg0Vo6hpMbp0t+nl/5+LYwKkMlSU1MBCAsLMzmJiIiI80hNTSU4OLjQ5y3G1SqSlCir1crRo0cJDAzEYvnrnl2RkZGXvUZQUZenpKQQFhZGYmIiQUFBJRP+KgrLWlr7Kep2RVnvSutcy1g58zjZuq9r2eZq69oyToU9p7GyfZvS/ExdbrkzjZV+/107wzBITU2levXquLkVPtNHR4BM5ubmRmhoaIHl7u7ul/0Dca3Lg4KCTPsFUFim0tpPUbcrynpXWudaxsSZx8nWfV3LNldb15ZxKuw5jZXt25TmZ+pKy51hrPT7zzZXOvJziSZBl1FRUVF2WW4me2WydT9F3a4o611pnWsZE2ceJ1v3dS3bXG1dW8apsOc0VrZvU5qfqWvJVZr0+6/sf6b0FZiTSklJITg4mHPnzpn2LyC5Oo2T49BYOQ6NlWMwe5x0BMhJeXt7M2HCBLy9vc2OIlegcXIcGivHobFyDGaPk44AiYiIiMvRESARERFxOSpAIiIi4nJUgIRFixZx1113UbNmTfz8/GjatClvvvkm2dnZZkeTf/jyyy/p1KkTFStWxNvbm7p16zJ27FiSk5PNjiaFyMnJoUWLFlgsFj799FOz48g//PTTT1gslgI/zZo1MzuaFOKzzz6jXbt2+Pn5ERISQvfu3Tl27Ng170fXARLeeOMNateuzZQpU6hSpQpr167l+eefZ+vWrcyZM8fsePI3SUlJdO3alSeffJLg4GC2bdvGxIkT2bJlCz/88IPZ8eQyoqOjOXXqlNkx5Co++ugjmjZtmvfYz8/PxDRSmDfffJNnnnmGcePG8dprr5Gens4vv/xCZmbmte/MEJd38uTJAssmTZpkAMbx48dNSCTX4sMPPzQA4+DBg2ZHkX9ITEw0AgMDjTlz5hiA8cknn5gdSf5h9erVBmCsW7fO7ChyFXv27DE8PT2NadOm2WV/+gpMqFSpUoFlbdq0AeDo0aOlHUeuUUhICIC+siyDHn/8cXr16sX1119vdhQRhzdz5ky8vLwYPny4XfanAlRG7dq1i3fffZehQ4fSvHlzPDw8sFgsvPTSS0XafuHChXTt2pXy5cvj7+9Py5YtmTJlSpH/kvzll1/w8vKiXr16xXkbLsGMscrNzSUzM5ONGzcyceJEevbsqbG6itIep++++46VK1fy+uuv2/NtuAQzPlO9e/fG3d2dKlWq8O9//5ukpCR7vR2nVppjtXbtWho3bsycOXOoVasWHh4etGzZkm+//da28HY5jiR299hjjxlAgZ9JkyYVeVsPDw+jR48ext13322UK1fOAIxOnToZGRkZV9x+x44dhq+vr/Hwww/b6+04NTPGKjg4OO91evToYaSlpdn7bTmd0hyn8+fPG/Xq1TPeeOMNwzAMIyEhQV+BXYPSHKu4uDjjiSeeMJYuXWqsXr3amDx5shEcHGw0a9bMyMzMLKm36DRKc6waNWpkBAQEGNWqVTPmzp1rrFixwrj99tsNDw8PY/v27decXQWojJo+fboxbtw4Y/78+cbOnTuNQYMGFekP1eLFiw3ACAgIMDZt2pS3/NSpU0bz5s0NwHjiiScK3f7UqVNGgwYNjObNm+sv1SIyY6w2b95s/Pbbb8b7779vhIaGGjfccIORk5Nj1/flbEpznMaPH280adLEuHDhgmEYKkDXyqzff5esXLnSAIxZs2YV9604vdIcqwYNGhiA8c033+Qty8rKMkJDQ41BgwZdc3YVIAcxZMiQIv2hioyMNADjpZdeKvDcr7/+agCGt7e3cfbs2QLPp6SkGG3btjVq1aplHDlyxG7ZXU1pjNXf/f777wZgLFy4sFi5XU1JjdOBAwcMb29vY9GiRUZycrKRnJxsbNmyxQCMGTNmXHU8paDS/kwZhmGEhIQYo0ePtjmzqyrJsWrXrp0BFDgy1L9/fyMiIuKas2oOkBM5cuQIsbGxAAwYMKDA8506dSIsLIysrCyWL1+e77msrCx69+7NgQMHWLFiBdWrVy+VzK6qOGP1TxEREVgsFvbu3VsiWV2ZLeOUkJBAVlYWffr0oXz58pQvX56WLVsCMHz4cGrUqFF6b8CF2PMzdYnFYrFrRrnI1rH6+2UK/s4wDJtOg1cBciKbN28GLp4VVKdOncuu07Zt23zrwsUJtffeey+xsbEsX76cRo0alXxYF2frWF3Ob7/9hmEY1K1b174hxaZxatWqFatXr87388knnwAwfvx42ydsyhXZ8zO1YsUKkpKSaNeunX1DCmD7WPXq1Qsg3zXPsrKyWLNmTd7610IXQnQiCQkJANSsWbPQdcLCwvKtCxAVFcWSJUuYNGkSubm5/P7773nPhYeHExQUVEKJXZetY3XzzTfTvXt3mjZtire3N5s3b+b111+nRYsW3HnnnSWa2RXZMk7lypWja9eu+dY5cOAAcPHz1LlzZ/sHFZs/UwMHDqROnTq0adOGwMBA1q9fz2uvvUarVq249957Sza0i7J1rHr16sV1113HiBEjePXVV6latSrvvvsuycnJ/Oc//7nmHCpATiQ1NRUAf3//QtcJCAgAICUlJW/Zd999B1z81+n48ePzrb969eoCv8yl+Gwdq3bt2jFv3ry8Xwq1a9dm9OjRjB07Fi8vrxJM7JpsHScpfbaOVdOmTVmwYAHR0dGcP3+e0NBQhg8fzoQJE/SZKiG2jpWbmxvLli1j3LhxPPHEE5w/f57IyEh+/PHHQr8euxIVIMn716mUfZMmTWLSpElmx5BrVLt2bQzDMDuGXMYzzzzDM888Y3YMKaKQkBBmzpzJzJkzi70vzQFyIoGBgQCkp6cXuk5aWhqAvtYymcbKMWicHIfGynGUlbFSAXIitWvXBiAxMbHQdS49d2ldMYfGyjFonByHxspxlJWxUgFyIq1btwbgzJkz+SaO/d3GjRuBi6dOi3k0Vo5B4+Q4NFaOo6yMlQqQEwkNDSUyMhKABQsWFHh+zZo1JCYm4u3tTc+ePUs7nvyNxsoxaJwch8bKcZSVsVIBcjLPPvssAJMnTyYuLi5v+ZkzZxg9ejQADz/8MMHBwabkk79orByDxslxaKwcR1kYK4uhUxPKpLi4uLw/BAD79u3j9OnThIaG5ruS7OLFi6lWrVq+bR977DHeeecdPD096d69O/7+/vzwww+cPXuWjh07smrVKnx9fUvtvTg7jZVj0Dg5Do2V43Dosbrmm2dIqVi9evVl77D7z5+EhITLbv/ZZ58Z119/vREUFGT4+voazZo1MyZPnmxkZWWV7htxARorx6BxchwaK8fhyGOlI0AiIiLicjQHSERERFyOCpCIiIi4HBUgERERcTkqQCIiIuJyVIBERETE5agAiYiIiMtRARIRERGXowIkIiIiLkcFSERERFyOCpCIiIi4HBUgESm22rVrY7FYsFgsLFq0qND1brzxRiwWC7Nnzy7yvn/66ScsFgtdu3YtflAX88ILL2CxWHjhhRfMjiJS5qgAiYhdPffcc+Tk5Jgd44ouFbYDBw6YHUVETKICJCJ24+fnx+7du/noo4/sts927dqxc+dO5s6da7d9ioioAImI3Tz22GMAvPjii2RkZNhln35+fjRu3JiaNWvaZX8iIqACJCJ21LNnT7p06cKxY8d466237LLPwuYAHThwAIvFQu3atTEMgw8//JA2bdrg7+9PcHAwPXr0YN26dfm2mT17NhaLhYMHDwJQp06dvLlLFouFn376Kd/6R48eZezYsTRp0gQ/Pz8CAwOJjIxk6tSpl/2ab+jQoXlznLZv307//v2pVq0a7u7uvPDCCzzzzDNYLBYeeuihQt/v9u3bsVgsVKlShezs7LzlX375JSNGjKBZs2aUL18eHx8f6tSpw7Bhw9i1a9c1/leFhQsXcuONN1KhQgU8PT2pUKEC4eHhjBw5kq1bt17z/kQcjQqQiNjVa6+9BsCUKVM4c+ZMqbzmAw88wMMPP0y5cuW4/fbbqVq1KqtWreKGG25g/fr1eevVr1+fIUOG4O/vD8A999zDkCFD8n6qVq2at+4vv/xCs2bNeOutt8jMzOSmm26iY8eO7Nu3j0ceeYTbbrstX0H5u7Vr19K2bVs2bNjA9ddfz2233UZgYCAPPPAAAJ999hmZmZmX3XbWrFkADBw4EE9Pz7zl/fr145NPPsHX15du3bpx88034+bmxqxZs2jTpg1r164t8n+vF198kX79+vHzzz/TrFkz+vbtS4cOHXB3d2fGjBn8+OOPRd6XiMMyRESKqVatWgZg/Prrr4ZhGMbdd99tAMaYMWPyrde9e3cDMGbNmlXkfa9evdoAjC5duuRbnpCQYAAGYNSqVcvYtWtX3nM5OTnGsGHDDMDo0aNHoXkTEhIu+5rHjh0zKlSoYFgsFmPatGlGbm5u3nOnT582unXrZgDGxIkT8203ZMiQvExPP/10vu0u6dixowEYn3zySYHnsrOzjcqVKxuAsW3btnzPffrpp0ZaWlq+ZVar1YiJiTEAo2nTpobVas33/IQJEwzAmDBhQt6yzMxMw9fX1wgICDD+/PPPAhkOHDhg7Ny587L/XUSciY4AiYjdvfLKK3h4eDBt2rS8r5tK0rvvvkvDhg3zHru7u/Pyyy8D8PPPPxd6pKYwb7/9NmfOnCEqKopRo0bh5vbXr8oKFSowd+5cPD09mTp1KoZhFNi+YcOGvPTSS/m2u2TYsGHAX0d6/u6bb77h5MmTtG3blmbNmuV7rn///nlHri6xWCyMHj2a6667jh07drBz586rvreUlBTOnz9P3bp1adSoUYHna9WqRePGja+6HxFHpwIkInbXqFEjhg0bRlZWFuPHjy/R1/Lw8OCWW24psLxq1aqUL1+erKysa/4q7ptvvgEulo7LqVGjBg0aNODUqVPs2bOnwPN33nkn7u7ul922X79++Pv78/3333P48OF8z10qRZdK0j/t3buXqVOn8vjjjzN8+HCGDh3K0KFDOXHiBECR5gJVqlSJ2rVrs3XrVp544gni4+Ovuo2IM1IBEpES8cILL+Dn58f8+fNLdFJttWrV8s2V+bugoCCAQufbFGb//v0AdO7cOd8k6b//XCoOp06dKrB97dq1C913QEAAffv2xWq15ju1/+TJk3zzzTf4+Phw33335dsmNzeXUaNG0bBhQx555BGio6OZOXMmc+bMYc6cOXl5U1JSivT+5s6dS+XKlfnvf/9L06ZNqVChAj179uStt97i9OnTRdqHiKPzMDuAiDinatWq8dhjj/Hqq6/yzDPP5B1VsbfLfc1UXFarFYA+ffoU+NrpnypUqFBgma+v7xW3GTZsGLNnz2bOnDk8++yzAMybN4+cnBz69OlDuXLl8q0fHR3N+++/T9WqVfnvf//Lv/71L6pUqYKPjw8AAwYM4JNPPrns13GX07lzZw4cOMA333zDzz//zNq1a1mxYgXffvstEyZMYPHixXTv3r1I+xJxVCpAIlJinnrqKT788EOWL1/OL7/8YnacIgsLC2PPnj089dRTtG3b1u7779y5M/Xr12f37t389ttvdOzYMe/2IJf7+uvzzz8H4IMPPqBXr14Fnr/c13BX4+vrS58+fejTpw9w8UjW888/z4cffsiwYcNKZe6WiJn0FZiIlJjg4OC8Ixz/+c9/TE7zFy8vL4BCb9lx6623An8Vj5Jw6ZT42bNns2nTJrZt20ZYWNhlj7wkJSUBFyco/9OOHTv4448/ip2nUqVKTJkyBYBDhw6RnJxc7H2KlGUqQCJSoqKioqhZsybr168vcGFCs4SGhgIXy8PlPPnkk5QrV47//ve/vPnmm1y4cKHAOgkJCcybN8/mDEOGDMHNzY3PP/+cmJiYfMv+qUmTJgDExMTkfT0HcOzYMQYPHnxN9147ePAgH3300WXnCy1duhSA8uXL582fEnFWKkAiUqK8vb158cUXAex2e4ziuueee4CLFxu85557GDFiBCNGjMg7iyo0NJSvvvqK8uXLM27cuLwjMwMHDuSOO+6gfv361K1bl6lTp9qcoUaNGvTo0YOUlBRmzZqFxWLJOyr0T88++yxeXl5Mnz6dRo0a0b9/f2699Vbq1atHVlYWd911V5FfNzk5mZEjR1KxYkXatWtH//796d+/PxEREQwaNAiLxcLrr79e6FlsIs5CBUhEStygQYNo3ry52THyjBo1ildffZVatWqxfPlyZsyYwYwZMzh27FjeOtdffz07duxg/PjxhIaGEhsby8KFC/njjz+oUqUKEyZMYPr06cXK8ff5Ptdffz1169a97Hrt27dn48aN9OrVi/T0dL7++uu8K1KvW7fumo7W1KtXj7fffpvbb7+ds2fPsnz5cr755hvS09MZPHgwsbGxDB8+vFjvS8QRWIyinjYgIiIi4iR0BEhERERcjgqQiIiIuBwVIBEREXE5KkAiIiLiclSARERExOWoAImIiIjLUQESERERl6MCJCIiIi5HBUhERERcjgqQiIiIuBwVIBEREXE5KkAiIiLiclSARERExOX8P42xZZsgF3xJAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(timings.keys()),\n", " list([r.average for r in timings.values()]),\n", " \"o-\",\n", ")\n", "plt.xlabel(\"N intervals\")\n", "plt.ylabel(\"time, seconds\")\n", "plt.gca().set_aspect(1.0)\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### vs total number of intersections" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that not only the number of intervals, but also the density of intervals determines the performance of overlap. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "22.7 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "45.5 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "163 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "611 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "2.51 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings = {}\n", "n_intersections = {}\n", "n = 1e4\n", "for avg_interval_len in [3, 1e1, 3e1, 1e2, 3e2]:\n", " df = make_random_intervals(n=n, n_chroms=1, max_length=avg_interval_len * 2)\n", " df2 = make_random_intervals(n=n, n_chroms=1, max_length=avg_interval_len * 2)\n", " timings[avg_interval_len] = %timeit -o -r 1 bioframe.overlap(df, df2)\n", " n_intersections[avg_interval_len] = bioframe.overlap(df, df2).shape[0]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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x5e6NvvkyZOiXr16AoBwdHQUPXr0EO+++6544403hI+PT8m12c8qvoysou8vKipKABBGRkYiMDBQDB06VAwdOlS0adOm5JKqn376qdQ6CoVCDB8+vORSrDZt2ojBgweLYcOGiU6dOgkLCwsBQOzfv7/UepGRkcLJyUkAELa2tuL1118Xw4YNEy+99JIwMzMr837u2bNHABDGxsbijTfeEOPGjRPjx48XZ86cKRmDci4jE0KImJiYkvfa0dFRDBkyRAwYMEBYW1sLACIgIKDMZV8V/VyfVd7r2djYCADC19dXDBw4UAwfPlx069ZNGBoallz3TnUDC5xIA15U4EqlUvj7+2tNgSuVSrFw4ULRvHlzYWpqWpLrn9dAP3r0SMybN08EBAQIKysrYWxsLFxdXcVLL70k5s+fLy5fvlxq/IsKPDMzU/z4449i4MCBonHjxsLS0lJYWFiIJk2aiFGjRokLFy5U+L3s27dPDBo0SLi4uAgjIyNha2srmjVrJt5++22xbds2kZOTU2adJ0+eiLlz5wp/f39hYWEhzMzMhLe3txg2bJg4cOBAmfFr164VAQEBwtzcvNyfVUUFLsTTa9Znz54tmjVrJkxNTYW5ublo06aNWLRokcjNzS0zXt0C37Jlixg7dqxo0aKFsLe3FyYmJsLDw0P06dNH7Ny5s9R1+aTfZEIIUVN790RERFQz+Bk4ERGRDmKBExER6SAWOBERkQ5igRMREekgFjgREZEOYoETERHpIBY4ERGRDmKBExER6SAWOBERkQ5igRMREekgFjgREZEOYoETERHpIBY4ERGRDvr/IamterFti74AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(n_intersections.values()),\n", " list([r.average for r in timings.values()]),\n", " \"o-\",\n", ")\n", "plt.xlabel(\"N intersections\")\n", "plt.ylabel(\"time, seconds\")\n", "plt.gca().set_aspect(1.0)\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### vs number of chromosomes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we consider a genome of the same length, divided into more chromosomes, the timing is relatively unaffected." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "443 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "456 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "414 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "434 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "451 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "409 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "443 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings = {}\n", "n_intersections = {}\n", "n = 1e5\n", "for n_chroms in [1, 3, 10, 30, 100, 300, 1000]:\n", " df = make_random_intervals(n, n_chroms)\n", " df2 = make_random_intervals(n, n_chroms)\n", " timings[n_chroms] = %timeit -o -r 1 bioframe.overlap(df, df2)\n", " n_intersections[n_chroms] = bioframe.overlap(df, df2).shape[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note this test preserves the number of intersections, which is likely why performance remains similar over the considered range." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: 810572,\n", " 3: 810871,\n", " 10: 809463,\n", " 30: 815322,\n", " 100: 808166,\n", " 300: 802130,\n", " 1000: 787235}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n_intersections" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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AACARsilCfJ//vOf1bNnzyqDVrnf//736tmzp/785z+7XBwAAEBj51LY+vTTT3X99ddfsd3111+vTz/91JVDAAAANAkuha3CwkKdOXPmiu3Onj2roqIiVw4BAADQJLgUtnr37q3ExETt2bOn2jZ79+7VRx99pOuuu87l4pqyhIQE9e7dW9HR0fVdCgAAMJFLYeuxxx6TzWbT7bffrj/+8Y9KTU1VQUGBCgoKdOjQIc2dO1e33367DMNQbGysu2tuEmJjY5WamqqkpKT6LgUAAJjIpdv1PPjggzpw4ICWL1+uJUuWaMmSJZXaGIah6dOnX/b+iQAAAE2dy7friY+P18aNGxUTEyOr1SrDMGQYhnx8fDR8+HC98847WrZsmTtrBQAAaHRqdSPqO++8U3feeadsNpvS09MlSa1bt5anp6dbigMAAGjsahW2ynl6eiosLMwduwIAAGhSXD6NCAAAgCtzeWTLZrNp7dq1+vDDD3X69GkVFhZW2c5isWjbtm0uFwgAANCYuRS2srKydNtttykpKUmGYVy2rcVicakwAACApsClsDVv3jx9+umn6tixox577DH16tVLQUFB7q4NAACg0XMpbG3YsEEtW7bUJ598oo4dO7q7JgAAgCbDpQny33//vQYNGkTQAgAAuAKXwlbbtm3l6+vr7loAAACaHJfC1ujRo7V7926VlJS4ux4AAIAmxaWwtWDBAnl5eek3v/lNtZd8AAAAgIsT5FesWKGRI0fq5Zdf1tatWzVixAh16tRJHh6Vs5vFYtG8efNqXSgAAEBj5FLY+tOf/iSLxSLDMJSWlqZVq1ZValO+nrAFAACaM5fC1vz5891dBwAAQJNE2AIAADARN6IGAAAwkcs3oq7ou+++06lTpyRJHTt2VPv27d2xWwAAgEavViNbL730knr27KmOHTvqpptu0k033aTw8HD16tVLK1eudFeNAAAAjZbLYWvKlCn69a9/rW+++UaGYSgkJEQhISEyDENff/21pkyZoilTprizVgAAgEbHpbC1Zs0avfTSS2rZsqWeeeYZZWZm6vz58zp//rwuXLigv/3tbwoJCdHKlSu1du1ad9cMAADQaLgUtp5//nl5eXlp69atiouLU3BwsGNdUFCQZs6cqa1bt8rT01PPP/+824oFAABobFwKWykpKRo6dKiioqKqbdOvXz8NHTpUycnJ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YQsAAMBEhC0AAAATEbYAAABMRNgCAAAwEWELAADARIQtAAAAExG2AAAATETYAgAAMBFhCwAAwESELQAAABMRtgAAAExE2AIAADARYQsAAMBEhC0AAAATEbYAAABMRNgCAAAwEWELAADARIQtAAAAExG2AAAATETYAgAAMBFhCwAAwESELQAAABMRtgAAAExE2AIAADARYQsAAMBEhC0AAAATEbYAAABMRNgCAAAwEWELAADARIQtAAAAExG2AAAATETYAgAAMBFhCwAAwESELQAAABMRtgAAAExE2AIAADARYQsAAMBEhC0AAAATEbYAAABMRNiqhSNHjmjq1KmKioqSt7e3IiMj67skAADQwHjVdwGN2ZdffqlNmzZpwIABMgxDmZmZ9V0SAABoYBjZqoXRo0fr1KlTeuutt3TTTTfVdzkAAKABImzVgocH/3wAAODyGnRa+Prrr7V8+XJNnjxZffv2lZeXlywWixYtWlSj7desWaNhw4YpJCRE/v7+uuGGG7R06VKVlJSYXDkAAECZBj1n67nnnlN8fLxL2/72t79VfHy8vLy8FBMTo4CAAG3fvl2zZ8/Wxo0b9cEHH8jPz8/NFQMAADhr0CNbffr00axZs/TGG2/o0KFDeuCBB2q03YYNGxQfH6+AgADt27dPW7Zs0bp163T48GH17dtXiYmJmjdvntM2q1atksViueLX2rVrzXiqAACgiWrQI1uPPPKI0+OazpF6+umnJUlz5sxRVFSUY3loaKhWrFihIUOG6Nlnn9W8efMUHBwsSbrrrrs0cODAK+67Y8eONS0fAACgYYctV5w+fVpJSUmSpPvuu6/S+sGDBysiIkJpaWnavHmz7r33XklScHCwI3gBAAC4S5MLWykpKZKkVq1aqUuXLlW26d+/v9LS0pSSkuIIW3WlqKhIRUVFjsdZWVmSpIyMDLdP3C8pKVF+fr7S09Pl7e3t1n2j+aJfwQz0K5jFrL6Vk5MjSTIM44ptm1zYOnbsmCSpU6dO1baJiIhwauuq/Px8bd68WZL07bffKj8/3zGnKzo6Wp07d660zeLFi7VgwYJKy6sLhgAAoOHKycm54pmxJhe2ypOmv79/tW0CAgIkSdnZ2bU61g8//KAJEyY4LSt//PLLL2vy5MmVtvnDH/6guLg4x2O73a6MjAy1bt1aFoulyuNER0c7To1ezfrs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e3f5+voqODhYgwYN0vPPPy+bzVZpv6tWrZLFYtHkyZOVlZWluLg4RUZGytfXV927d9df/vIX2e12SdLp06f16KOPKiIiQlarVddee62WL19e7fPLz8/XkiVLFBUVpcDAQLVo0ULXXXed5s6dq8zMzCq3OXDggCZNmqTw8HD5+PgoKChIXbt21bhx4/T2229Xuc2bb76pESNGqFWrVrJarercubN+9atf6ZtvvqmyfcV5c++9956GDRum4OBghYSE6P/+7//0xRdfONquXr1aP/3pTxUYGKiWLVvq7rvv1tGjR6t9zmfOnFFcXJx69eqlFi1aKDAwUNHR0Xr22WdVWlpaqX1RUZH++te/6sYbb1RgYKB8fHzUrl07RUdH6/e//70yMjKqPRbQIBgAmjVJLn1djc8++8zo2LGjIckIDg42Ro0aZUyaNMn46U9/avj5+RlDhw51at+5c2dDkjFv3jzDYrEYN954o3HPPfcYAwcOdBz/H//4R6XjDB061JBkTJs2zfDw8DB69+5t3HPPPcbIkSON1atXG4ZhGJ9++qnRqlUrQ5LRqVMnY9KkScbtt99u+Pr6GpKM2267zSgqKnLa78svv2xIMsaOHWv06tXLCAsLM8aNG2eMHDnS8PPzMyQZ06dPN44cOWK0a9fOiIiIMCZOnGgMHz7c8PT0NCQZS5YsqVRvenq68ZOf/MSQZAQFBRljxowxxo0bZ4SGhhqSjC5duhjHjh1z2ubDDz80vL29DUnGDTfcYIwfP9646667jAEDBhhWq9UYO3asU3u73W48+OCDhiTDy8vLiImJMe655x6jR48ehiSjRYsWxnvvvVeptvL/gzlz5hgWi8UYNGiQMXHiRMd2LVu2NI4cOWI88cQTjv2OHz/eiIiIMCQZHTp0MDIyMirtd9euXUZISIghyYiMjDTGjBlj3HbbbY5lI0eONIqLix3tbTabMWLECMe/0R133GHce++9xi233OKoMSUlpdJxgIaEsAU0cw8//LDjq0+fPoYkY8yYMY5l5W+uEydOdGpbU7m5uY434AcffNDIyclxWn/hwgVj69atTsvK30S9vb2NjRs3Oq0rDz7BwcFGfn6+07rysCXJSEhIqFRLYWGhY99Tp051elM/evSoERkZaUgynnzyySqPKckYPXq0kZeX51h34MABw8vLyxHupk6dapSUlDjWb9iw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9u1Tt27dNHz4cHl5eWnXrl06d+6cunTpojfeeMNpm0WLFumJJ55Qz5491atXL/n5+enMmTOOTyY++OCDioqKcrR/9NFHtWfPHr322mvq37+/hg4dqrCwMCUnJ+vrr7+Wn5+fVq9erTZt2pj+fMPDw/X2229r3LhxmjVrlpYuXao+ffqoffv2ysrK0qFDh3T06FHddNNNuv/++yVJn3/+uWbOnKmgoCBFRUWpQ4cOKigoUHJysk6cOKHg4GA99dRTptcO1AZhC4B27NihkJAQp0sQ7NixQ127dnXLqEG/fv30xRdfKD4+Xm+//bZ27twpu92u9u3ba8yYMY7LD9SF6OhoffbZZ/rLX/6i9957T+vXr5fValW/fv304IMP6pFHHpGXV928NLZu3Vp79uzRsmXL9J///EcffPCB7Ha7unTpoilTpmjWrFkKCQlx2iYhIUHbtm1TUlKSdu3apby8PLVr10633nqrfv3rXzvNr5PK5ne9+uqruuOOO/TCCy/owIEDjm0mT56sOXPm6Nprr62T5yuVnT798ssv9eyzz+rdd99VUlKSioqKFBYWpk6dOun+++93mjc4evRoZWVl6eOPP9bhw4f1ySefyM/PTxEREZozZ45iY2MVHh5eZ/UDrrAYhmHUdxEAAABNFXO2AAAATETYAgAAMBFhCwAAwESELQAAABMRtgAAAExE2AIAADARYQsAAMBEhC0AAAATEbYAAABMRNgCAAAwEWELAADARIQtAAAAE/1/xDny16H/4qsAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(timings.keys()),\n", " list([r.average for r in timings.values()]),\n", " \"o-\",\n", ")\n", "plt.ylim([1e-1, 10])\n", "plt.xlabel(\"# chromosomes\")\n", "plt.ylabel(\"time, seconds\")\n", "# plt.gca().set_aspect(1.0)\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### vs other parameters: join type, sorted or categorical inputs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that default for overlap: `how='left', keep_order=True`, and the returned dataframe is sorted after the overlaps have been ascertained. Also note that `keep_order=True` is only a valid argument for `how='left'` as the order is not well-defined for inner or outer overlaps. " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "418 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "274 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "df = make_random_intervals()\n", "df2 = make_random_intervals()\n", "%timeit -r 1 bioframe.overlap(df, df2)\n", "%timeit -r 1 bioframe.overlap(df, df2, how='left', keep_order=False)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "329 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "151 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "247 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "df = make_random_intervals()\n", "df2 = make_random_intervals()\n", "\n", "%timeit -r 1 bioframe.overlap(df, df2, how='outer')\n", "%timeit -r 1 bioframe.overlap(df, df2, how='inner')\n", "%timeit -r 1 bioframe.overlap(df, df2, how='left', keep_order=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note below that detection of overlaps takes a relatively small fraction of the execution time. The majority of the time the user-facing function spends on formatting the output table." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "449 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "148 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "61 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "62.4 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n" ] } ], "source": [ "df = make_random_intervals()\n", "df2 = make_random_intervals()\n", "\n", "%timeit -r 1 bioframe.overlap(df, df2)\n", "%timeit -r 1 bioframe.overlap(df, df2, how='inner')\n", "%timeit -r 1 bioframe.ops._overlap_intidxs(df, df2)\n", "%timeit -r 1 bioframe.ops._overlap_intidxs(df, df2, how='inner')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that sorting inputs provides a moderate speedup, as well as storing chromosomes as categoricals " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Default inputs (outer/inner joins):\n", "440 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "149 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "Sorted inputs (outer/inner joins):\n", "331 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "137 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "Categorical chromosomes (outer/inner joins):\n", "333 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "90 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n" ] } ], "source": [ "print(\"Default inputs (outer/inner joins):\")\n", "df = make_random_intervals()\n", "df2 = make_random_intervals()\n", "\n", "%timeit -r 1 bioframe.overlap(df, df2)\n", "%timeit -r 1 bioframe.overlap(df, df2, how='inner')\n", "\n", "print(\"Sorted inputs (outer/inner joins):\")\n", "df_sorted = make_random_intervals(sort=True)\n", "df2_sorted = make_random_intervals(sort=True)\n", "\n", "%timeit -r 1 bioframe.overlap(df_sorted, df2_sorted)\n", "%timeit -r 1 bioframe.overlap(df_sorted, df2_sorted, how='inner')\n", "\n", "print(\"Categorical chromosomes (outer/inner joins):\")\n", "df_cat = make_random_intervals(categorical_chroms=True)\n", "df2_cat = make_random_intervals(categorical_chroms=True)\n", "\n", "%timeit -r 1 bioframe.overlap(df_cat, df2_cat)\n", "%timeit -r 1 bioframe.overlap(df_cat, df2_cat, how='inner')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vs Pyranges (and, optionally, pybedtools)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Default arguments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The core intersection function of PyRanges is faster, since PyRanges object splits intervals by chromosomes at the object construction stage" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def df2pr(df):\n", " return pyranges.PyRanges(\n", " chromosomes=df.chrom,\n", " starts=df.start,\n", " ends=df.end,\n", " )" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.36 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "1.49 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "2.94 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "1.9 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "10.8 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "6.63 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "128 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "69.4 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "2.35 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "1.16 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "7.97 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "4.75 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings_bf = {}\n", "timings_pr = {}\n", "for n in [1e2, 1e3, 1e4, 1e5, 1e6, 3e6]:\n", " df = make_random_intervals(n=n, n_chroms=1)\n", " df2 = make_random_intervals(n=n, n_chroms=1)\n", " pr = df2pr(df)\n", " pr2 = df2pr(df2)\n", " timings_bf[n] = %timeit -o -r 1 bioframe.overlap(df, df2,how='inner')\n", " timings_pr[n] = %timeit -o -r 1 pr.join(pr2)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(timings_bf.keys()),\n", " list([r.average for r in timings_bf.values()]),\n", " \"o-\",\n", " label=\"bioframe\",\n", ")\n", "plt.loglog(\n", " list(timings_pr.keys()),\n", " list([r.average for r in timings_pr.values()]),\n", " \"o-\",\n", " label=\"pyranges\",\n", ")\n", "\n", "plt.gca().set(\n", " xlabel=\"N intervals\",\n", " ylabel=\"time, seconds\",\n", " aspect=1.0,\n", " xticks=10 ** np.arange(2, 6.1),\n", ")\n", "plt.grid()\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### With roundtrips to dataframes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that pyranges performs useful calculations at the stage of creating a PyRanges object. Thus a direct comparison for one-off operations on pandas DataFrames between bioframe and pyranges should take this step into account. This roundrip is handled by `pyranges_intersect_dfs` below." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def pyranges_intersect_dfs(df, df2):\n", " return df2pr(df).intersect(df2pr(df2)).as_df()\n", "\n", "\n", "if include_pybedtools:\n", "\n", " def pybedtools_intersect_dfs(bed1, bed2):\n", " return bed1.intersect(bed2).to_dataframe()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.28 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "3.9 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "3.02 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "4.64 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "11 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "11 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "125 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "87.4 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "2.15 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "1.44 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "7.98 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "5.23 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings_bf = {}\n", "timings_pr = {}\n", "if include_pybedtools:\n", " timings_pb = {}\n", "\n", "for n in [1e2, 1e3, 1e4, 1e5, 1e6, 3e6]:\n", " df = make_random_intervals(n=n, n_chroms=1)\n", " df2 = make_random_intervals(n=n, n_chroms=1)\n", " timings_bf[n] = %timeit -o -r 1 bioframe.overlap(df, df2, how='inner')\n", " timings_pr[n] = %timeit -o -r 1 pyranges_intersect_dfs(df, df2)\n", " if include_pybedtools:\n", " bed1 = pybedtools.BedTool.from_dataframe(df)\n", " bed2 = pybedtools.BedTool.from_dataframe(df2)\n", " timings_pb[n] = %timeit -o -r 1 pybedtools_intersect_dfs(bed1, bed2)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(timings_bf.keys()),\n", " list([r.average for r in timings_bf.values()]),\n", " \"o-\",\n", " label=\"bioframe\",\n", ")\n", "plt.loglog(\n", " list(timings_pr.keys()),\n", " list([r.average for r in timings_pr.values()]),\n", " \"o-\",\n", " label=\"pyranges\",\n", ")\n", "if include_pybedtools:\n", " plt.loglog(\n", " list(timings_pb.keys()),\n", " list([r.average for r in timings_pb.values()]),\n", " \"o-\",\n", " label=\"pybedtools\",\n", " )\n", "plt.gca().set(xlabel=\"N intervals\", ylabel=\"time, seconds\", aspect=1.0)\n", "plt.grid()\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Memory usage" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "import time\n", "\n", "from memory_profiler import memory_usage\n", "\n", "\n", "def sleep_before_after(func, sleep_sec=0.5):\n", " \"\"\"\n", " Wrapper that allows to report background interpreter's memory consumption\n", " for the first 5 time intervals (if increment is 0.1 abd sleep_sec=0.5):\n", " https://github.com/pythonprofilers/memory_profiler#api\n", " \"\"\"\n", "\n", " def _f(*args, **kwargs):\n", " time.sleep(sleep_sec)\n", " func(*args, **kwargs)\n", " time.sleep(sleep_sec)\n", "\n", " return _f\n", "\n", "\n", "mem_usage_bf = {}\n", "mem_usage_pr = {}\n", "if include_pybedtools:\n", " mem_usage_pb = {}\n", "\n", "for n in [1e2, 1e3, 1e4, 1e5, 1e6, 3e6]:\n", " df = make_random_intervals(n=n, n_chroms=1)\n", " df2 = make_random_intervals(n=n, n_chroms=1)\n", " mem_usage_bf[n] = memory_usage(\n", " (sleep_before_after(bioframe.overlap), (df, df2), dict(how=\"inner\")),\n", " backend=\"psutil_pss\",\n", " include_children=True,\n", " interval=0.1,\n", " )\n", " mem_usage_pr[n] = memory_usage(\n", " (sleep_before_after(pyranges_intersect_dfs), (df, df2), dict()),\n", " backend=\"psutil_pss\",\n", " include_children=True,\n", " interval=0.1,\n", " )\n", " if include_pybedtools:\n", " bed1 = pybedtools.BedTool.from_dataframe(df)\n", " bed2 = pybedtools.BedTool.from_dataframe(df2)\n", " mem_usage_pb[n] = memory_usage(\n", " (sleep_before_after(pybedtools_intersect_dfs), (bed1, bed2), dict()),\n", " backend=\"psutil_pss\",\n", " include_children=True,\n", " interval=0.1,\n", " )" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Note that r[4] is the background memory usage of Python interpreter,\n", "# and max(r) is the maximum memory usage (that must be from the\n", "# bioframe/pyranges functions)\n", "plt.figure(figsize=(8, 6))\n", "plt.loglog(\n", " list(mem_usage_bf.keys()),\n", " list([max(r) - r[4] for r in mem_usage_bf.values()]),\n", " \"o-\",\n", " label=\"bioframe\",\n", ")\n", "\n", "plt.loglog(\n", " list(mem_usage_pr.keys()),\n", " list([max(r) - r[4] for r in mem_usage_pr.values()]),\n", " \"o-\",\n", " label=\"pyranges\",\n", ")\n", "\n", "if include_pybedtools:\n", " plt.loglog(\n", " list(mem_usage_pb.keys()),\n", " list([max(r) - r[4] for r in mem_usage_pb.values()]),\n", " \"o-\",\n", " label=\"pybedtools\",\n", " )\n", "\n", "plt.gca().set(xlabel=\"N intervals\", ylabel=\"Memory usage, Mb\", aspect=1.0)\n", "plt.grid()\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Bioframe dtypes:\n" ] }, { "data": { "text/plain": [ "chrom object\n", "start int64\n", "end int64\n", "dtype: object" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Pyranges dtypes:\n" ] }, { "data": { "text/plain": [ "Chromosome category\n", "Start int64\n", "End int64\n", "dtype: object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(\"Bioframe dtypes:\")\n", "display(df.dtypes)\n", "print()\n", "\n", "print(\"Pyranges dtypes:\")\n", "display(df2pr(df).dtypes)\n", "\n", "if include_pybedtools:\n", " print(\"Pybedtools dtypes:\")\n", " bed1 = pybedtools.BedTool.from_dataframe(df)\n", " display(bed1.to_dataframe().dtypes)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "### Combined performance figure.\n", "\n", "fig, axs = plt.subplot_mosaic(\"AAA.BBB\", figsize=(9.0, 4))\n", "\n", "plt.sca(axs[\"A\"])\n", "\n", "plt.text(\n", " -0.25,\n", " 1.0,\n", " \"A\",\n", " horizontalalignment=\"center\",\n", " verticalalignment=\"center\",\n", " transform=plt.gca().transAxes,\n", " fontsize=19,\n", ")\n", "\n", "plt.loglog(\n", " list(timings_bf.keys()),\n", " list([r.average for r in timings_bf.values()]),\n", " \"o-\",\n", " color=\"k\",\n", " label=\"bioframe\",\n", ")\n", "plt.loglog(\n", " list(timings_pr.keys()),\n", " list([r.average for r in timings_pr.values()]),\n", " \"o-\",\n", " color=\"gray\",\n", " label=\"pyranges\",\n", ")\n", "if include_pybedtools:\n", " plt.loglog(\n", " list(timings_pb.keys()),\n", " list([r.average for r in timings_pb.values()]),\n", " \"o-\",\n", " color=\"lightgray\",\n", " label=\"pybedtools\",\n", " )\n", "\n", "plt.gca().set(\n", " xlabel=\"N intervals\",\n", " ylabel=\"time, s\",\n", " aspect=1.0,\n", " xticks=10 ** np.arange(2, 6.1),\n", " yticks=10 ** np.arange(-3, 0.1),\n", ")\n", "\n", "plt.grid()\n", "plt.legend()\n", "\n", "plt.sca(axs[\"B\"])\n", "plt.text(\n", " -0.33,\n", " 1.0,\n", " \"B\",\n", " horizontalalignment=\"center\",\n", " verticalalignment=\"center\",\n", " transform=plt.gca().transAxes,\n", " fontsize=19,\n", ")\n", "plt.loglog(\n", " list(mem_usage_bf.keys()),\n", " list([max(r) - r[4] for r in mem_usage_bf.values()]),\n", " \"o-\",\n", " color=\"k\",\n", " label=\"bioframe\",\n", ")\n", "\n", "plt.loglog(\n", " list(mem_usage_pr.keys()),\n", " list([max(r) - r[4] for r in mem_usage_pr.values()]),\n", " \"o-\",\n", " color=\"gray\",\n", " label=\"pyranges\",\n", ")\n", "if include_pybedtools:\n", " plt.loglog(\n", " list(mem_usage_pb.keys()),\n", " list([max(r) - r[4] for r in mem_usage_pb.values()]),\n", " \"o-\",\n", " color=\"lightgray\",\n", " label=\"pybedtools\",\n", " )\n", "\n", "plt.gca().set(\n", " xlabel=\"N intervals\",\n", " ylabel=\"Memory usage, Mb\",\n", " aspect=1.0,\n", " xticks=10 ** np.arange(2, 6.1),\n", ")\n", "\n", "plt.grid()\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Slicing " ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "334 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "468 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "346 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "593 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "668 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "1.92 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "3.54 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "18.1 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "40.1 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "222 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "118 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "804 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings_slicing_bf = {}\n", "timings_slicing_pr = {}\n", "\n", "\n", "for n in [1e2, 1e3, 1e4, 1e5, 1e6, 3e6]:\n", " df = make_random_intervals(n=n, n_chroms=1)\n", " timings_slicing_bf[n] = %timeit -o -r 1 bioframe.select(df, ('chr1', n//2, n//4*3))\n", " pr = df2pr(df)\n", " timings_slicing_pr[n] = %timeit -o -r 1 pr['chr1', n//2:n//4*3]" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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bEjp0qVxc3MjKCiIxx9/nEOHDt1kq8LcuXO5++67KVu2LM7OzpQtW5b69evzxBNPsGfPnpu+nkhRosRHRGzmww8/BGDixIlcvny5QF7zscce45lnnqFUqVLcf//9VKpUiZUrV3LXXXexZcuWtHI1a9ZkyJAheHp6AvDwww8zZMiQtD+VKlVKK7t+/XoaNmzIZ599RkJCAl26dKFt27YcPXqUZ599lvvuuy9dYnK9jRs30qJFC/7991/uvPNO7rvvPry9vXnssccA+OWXX0hISMi07tSpUwEYOHAgzs7Oacf79OnD7NmzcXd3p1OnTtxzzz04ODgwdepUmjdvzsaNG3PdXv/73//o06cP69ato2HDhjzyyCO0adMGR0dHfvzxR1avXp3ra4kUSYaIyC0ICAgwAOPvv/82DMMwHnroIQMwXnzxxXTlOnfubADG1KlTc33tNWvWGIDRoUOHdMdDQ0MNwACMgIAA49ChQ2nnUlJSjMcff9wAjK5du2YZb2hoaKavefbsWaNs2bKGyWQyJk+ebJjN5rRzly5dMjp16mQAxoQJE9LVGzJkSFpMr776arp6qdq2bWsAxuzZszOcS05ONipUqGAAxt69e9OdmzNnjhEbG5vumMViMYKDgw3AaNCggWGxWNKdHz9+vAEY48ePTzuWkJBguLu7G15eXsbBgwczxHD8+HHjwIEDmbaLSHGhOz4iYlPvvfceTk5OTJ48Oa1bKT99+eWX1K5dO+25o6Mj7777LgDr1q3L8s5MVj7//HMuX77MqFGjGDFiBA4O135Mli1blunTp+Ps7MxXX32FYRgZ6teuXZt33nknXb1Ujz/+OHDtzs71lixZwoULF2jRogUNGzZMd65v375pd6pSmUwmRo4cye23387+/fs5cOBAju8tOjqa+Ph4qlevTp06dTKcDwgIoG7dujleR6QoU+IjIjZVp04dHn/8cRITExk3bly+vpaTkxPdunXLcLxSpUqULl2axMTEm+5yW7JkCWBNNjJTtWpVatWqxcWLFzly5EiG8w8++CCOjo6Z1u3Tpw+enp789ddfnDp1Kt251GQoNTm60X///cdXX33FCy+8wLBhwxg6dChDhw7l/PnzALka61O+fHkCAwPZs2cPL730EiEhITnWESlulPiIiM299dZbeHh4MHPmzHwdLFu5cuV0Y2Gu5+PjA5DleJqsHDt2DID27dunG/x8/Z/UhOHixYsZ6gcGBmZ5bS8vLx555BEsFku6KfoXLlxgyZIluLm50b9//3R1zGYzI0aMoHbt2jz77LNMmjSJKVOmMG3aNKZNm5YWb3R0dK7e3/Tp06lQoQKffvopDRo0oGzZsnTv3p3PPvuMS5cu5eoaIkWZk70DEJHip3Llyjz//PO8//77vPbaa2l3UWwts+6kW2WxWADo3bt3hu6lG5UtWzbDMXd392zrPP744/z0009MmzaN119/HYAZM2aQkpJC7969KVWqVLrykyZN4ptvvqFSpUp8+umn3HHHHVSsWBE3NzcAHn30UWbPnp1pt1tm2rdvz/Hjx1myZAnr1q1j48aNLF++nD///JPx48ezYMECOnfunKtriRRFSnxEJF+MHTuW7777jqVLl7J+/Xp7h5Nr/v7+HDlyhLFjx9KiRQubX799+/bUrFmTw4cP888//9C2bdu0bTwy6+b69ddfAfj222/p2bNnhvOZdbflxN3dnd69e9O7d2/AeufqzTff5LvvvuPxxx8vkLFZIvairi4RyRe+vr5pdzReeeUVO0dzjYuLC0CWW2vce++9wLWEIz+kTm3/6aef2L59O3v37sXf3z/TOy3h4eGAdeDxjfbv38+uXbtuOZ7y5cszceJEAE6ePElERMQtX1OksFLiIyL5ZtSoUVSrVo0tW7ZkWFDQXvz8/ABr0pCZl19+mVKlSvHpp5/yySefkJSUlKFMaGgoM2bMyHMMQ4YMwcHBgV9//ZXg4OB0x25Ur149AIKDg9O64QDOnj3L4MGDb2pvtBMnTvDDDz9kOh5o0aJFAJQuXTptfJRIcaTER0TyjaurK//73/8AbLaNxa16+OGHAesigQ8//DDDhw9n+PDhabOi/Pz8+P333yldujRjxoxJuxMzcOBAevToQc2aNalevTpfffVVnmOoWrUqXbt2JTo6mqlTp2IymdLuAt3o9ddfx8XFhe+//546derQt29f7r33XmrUqEFiYiK9evXK9etGRETwxBNPUK5cOVq1akXfvn3p27cvzZo1Y9CgQZhMJj766KMsZ6WJFAdKfEQkXw0aNIhGjRrZO4w0I0aM4P333ycgIIClS5fy448/8uOPP3L27Nm0MnfeeSf79+9n3Lhx+Pn5sXXrVubOncuuXbuoWLEi48eP5/vvv7+lOK4fz3PnnXdSvXr1TMu1bt2abdu20bNnT65cucIff/yRtoL0pk2bburuTI0aNfj888+5//77iYyMZOnSpSxZsoQrV64wePBgtm7dyrBhw27pfYkUdiYjt1MBRERERIo43fERERGREkOJj4iIiJQYSnxERESkxFDiIyIiIiWGEh8REREpMZT4iIiISImhxEdERERKDCU+IiIiUmIo8REREZESQ4mPiIiIlBhKfERERKTEUOIjIiIiJYYSHxERESkx/h/W8174rH8lJwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(timings_slicing_bf.keys()),\n", " list([r.average for r in timings_bf.values()]),\n", " \"o-\",\n", " label=\"bioframe\",\n", ")\n", "\n", "plt.loglog(\n", " list(timings_slicing_pr.keys()),\n", " list([r.average for r in timings_pr.values()]),\n", " \"o-\",\n", " label=\"pyranges\",\n", ")\n", "plt.gca().set(xlabel=\"N intervals\", ylabel=\"time, s\", aspect=1.0)\n", "plt.grid()\n", "plt.legend()" ] } ], "metadata": { "kernelspec": { "display_name": "bioframe", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.5" } }, "nbformat": 4, "nbformat_minor": 4 } open2c-bioframe-4fe9b25/docs/guide-quickstart.rst000066400000000000000000000011451477525772300220770ustar00rootroot00000000000000Quickstart ========== Installation ------------ :: $ pip install bioframe To install the latest development version of `bioframe` from github, first make a local clone of the github repository: .. code-block:: bash $ git clone https://github.com/open2c/bioframe Then, compile and install `bioframe` in `development mode `_. This installs the package without moving it to a system folder, and thus allows for testing changes to the python code on the fly. .. code-block:: bash $ cd bioframe $ pip install -e ./ open2c-bioframe-4fe9b25/docs/guide-recipes.md000066400000000000000000000032171477525772300211310ustar00rootroot00000000000000--- jupytext: formats: md:myst text_representation: extension: .md format_name: myst format_version: 0.13 jupytext_version: 1.11.3 kernelspec: display_name: Python 3 language: python name: python3 --- # How do I ## Obtain overlapping intervals with matching strandedness? Use overlap with the ``on`` argument: ``` df = bf.overlap(df1, df2, on=[‘strand’]) ``` ## Obtain overlapping intervals with opposite strandedness? Overlap then filter pairs of opposite strandedness: ``` df = bf.overlap(df1, df2) df = df.loc[df["strand"]!=df["strand_"]] ``` ## Obtain intervals that exceed 50% coverage by another set of intervals? Coverage, then filter pairs by fractional coverage: ``` df = bf.coverage(df1, df2) df = df[ ( df["coverage"] / (df["end"]-df["start"]) ) >=0.50] ``` ## Shift all intervals on the positive strand by 10bp? Use pandas indexing: ``` df.loc[df.strand=="+",["start", "end"]] += 10 ``` ## Obtain intervals overlapped by at least 2 intervals from another set? Count overlaps, then filter: ``` df = bf.count_overlaps(df1, df2) df = df[ df["count"] >= 2] ``` ## Find strand-specific downstream genomic features? Use closest after filtering by strand, and passing the `ignore_upsream=True` argument. ``` bioframe.closest(df1.loc[df1['strand']=='+'], df2, ignore_upstream=True) ``` For gener, the upstream/downstream direction might be defined by the direction of transcription. Use `direction_col='strand'` to set up the direction: ``` bioframe.closest(df1, df2, ignore_upstream=True, direction_col='strand') ``` ## Drop non-autosomes from a bedframe? Use pandas DataFrame.isin(values): ``` df[ ~df.chrom.isin(['chrX','chrY'])] ``` open2c-bioframe-4fe9b25/docs/guide-specifications.rst000066400000000000000000000043731477525772300227160ustar00rootroot00000000000000.. _Specifications: Specifications =========== BedFrame (i.e. genomic intervals stored in a pandas dataframe): - In a BedFrame, three required columns specify the set of genomic intervals (default column names = (‘chrom’, ‘start’, ‘end’)). - Other reserved but not required column names: (‘strand’, ‘name’, ‘view_region’). - entries in column ‘name’ are expected to be unique - ‘view_region’ is expected to point to an associated region in a view with a matching name - ‘strand’ is expected to be encoded with strings (‘+’, ‘-’, ‘.’). - Additional columns are allowed: ‘zodiac_sign’, ‘soundcloud’, ‘twitter_name’, etc. - Repeated intervals are allowed. - The native pandas DataFrame index is not intended to be used as an immutable lookup table for genomic intervals in BedFrame. This is because many common genomic interval operations change the number of intervals stored in a BedFrame. - Two useful sorting schemes for BedFrames are: - scaffold-sorted: on (chrom, start, end), where chrom is sorted lexicographically. - view-sorted: on (view_region, start, end) where view_region is sorted by order in the view. - Null values are allowed, but only as pd.NA (using np.nan is discouraged as it results in unwanted type re-casting). - Note if no ‘view_region’ is assigned to a genomic interval, then ‘chrom’ implicitly defines an associated region - Note the BedFrame specification is a natural extension of the BED format ( ​​https://samtools.github.io/hts-specs/BEDv1.pdf ) for pandas DataFrames. ViewFrames (a genomic view stored in a pandas dataframe) - BedFrame where: - intervals are non-overlapping - “name†column is mandatory and contains a set of unique strings. - Note that a ViewFrame can potentially be indexed by the name column to serve as a lookup table. This functionality is currently not implemented, because within the current Pandas implementation indexing by a column removes the column from the table. - Note that views can be defined by: - dictionary of string:ints (start=0 assumed) or string:tuples (start,end) - pandas series of chromsizes (start=0, name=chrom) open2c-bioframe-4fe9b25/docs/index.rst000066400000000000000000000023521477525772300177220ustar00rootroot00000000000000.. bioframe documentation master file, created by sphinx-quickstart on Sat Apr 11 11:44:26 2020. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. bioframe ======== `Bioframe `_ is a library to enable flexible and scalable operations on genomic interval dataframes in python. Building bioframe directly on top of `pandas `_ enables immediate access to a rich set of dataframe operations. Working in python enables rapid visualization and iteration of genomic analyses. .. toctree:: :maxdepth: 1 :caption: Guide guide-quickstart guide-intervalops.md guide-io.ipynb guide-performance.ipynb guide-recipes.md guide-definitions guide-specifications guide-bedtools .. toctree:: :maxdepth: 1 :caption: Tutorials tutorials/tutorial_assign_motifs_to_peaks.ipynb tutorials/tutorial_assign_peaks_to_genes.ipynb .. toctree:: :maxdepth: 3 :caption: API api-construction api-validation api-intervalops api-fileops api-resources api-extras api-vis api-lowlevel.md Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` open2c-bioframe-4fe9b25/docs/lowlevel/000077500000000000000000000000001477525772300177105ustar00rootroot00000000000000open2c-bioframe-4fe9b25/docs/lowlevel/arrops.rst000066400000000000000000000002711477525772300217500ustar00rootroot00000000000000Array operations ================= Low level operations that are used to implement the genomic interval operations. .. automodule:: bioframe.core.arrops :autosummary: :members: open2c-bioframe-4fe9b25/docs/lowlevel/specs.rst000066400000000000000000000004471477525772300215640ustar00rootroot00000000000000Specifications ================= .. automodule:: bioframe.core.specs :autosummary: :members: **Unexposed functions:** .. automethod:: bioframe.core.specs._verify_column_dtypes .. automethod:: bioframe.core.specs._verify_columns .. automethod:: bioframe.core.specs._get_default_colnames open2c-bioframe-4fe9b25/docs/lowlevel/stringops.rst000066400000000000000000000001531477525772300224710ustar00rootroot00000000000000String operations ================= .. automodule:: bioframe.core.stringops :autosummary: :members: open2c-bioframe-4fe9b25/docs/make.bat000066400000000000000000000014331477525772300174650ustar00rootroot00000000000000@ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=. set BUILDDIR=_build if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% :end popd open2c-bioframe-4fe9b25/docs/times100.bw000066400000000000000000001134731477525772300177640ustar00rootroot00000000000000&üˆX‰†0€ Ê1Â4€þLN =f—f(Ó~û~'ˆÃ@€Žc€A€ËHDCB‘ŒÊxchr21ggÞxœ5Úe°ÖÕÛ†áRRÒ¡ Hw(Hª<€t—tH§€€A(%¡€°7lº[¤»AAZA ƒFJ%ôÿž¬óõËqÍ=׺×z~{üàŒQQQQƒ&ÅD ZõÿÿÄ‰ŠŠËlè$f"ø…¿$ÚÁ¯ŸÍEp²œ>)ìÃ9Îq¡gq™\eׇp³sÜa÷šñüÞ9žô..pŽKãJ3®³ƒ›|n÷.ÜcƃfüÎŒ'ÌxÖŒ¼ /{þá]xÓ9ÞuŽ™ñ‰¿ãÄ„9Æ7câ˜ÐÁä1a'¦±ƒ/™1³ÌN.›±"汃Íøº},oz/–³•ÌXͳXÛ960ã{fliÆvîÇNα»sì¾9ö÷mø©süÌ9Žð=8Æ=8Þ9F{N5ã,;8ߌKìà 3®õ^Üh·ùÍq·oÀf<êüÁ³xÆžw?^²¿›ñ†}üÓ=øÐ9>vþÌÉa'Æ3c¢É¡ƒ/NßS‡N3ØÁW̘͌¹'‡·a÷àkîÁâö±ŒoÀwœcE3VµƒµÌXß61c ;ØÖ9vtŽÝœã¾ûùNüÄ÷ãû8ÜŒ£Ý‰ãÌ8ÉÆ:Ç™fœg{~ã{püÖŒ[͸ˌûÍxÄ»ð¸O{þd/z/þæwÀëžÅ;öñs|dÆÿì`Ü)!ã fL6%ô1•sLoÆLSÂ{0«sÌeÆüv°È”ð»ð ;XÚ»°¬#f¬bkš±žû±±û±¹slãì`»:Ç^ÎñCçø±wá`;8Ì9ŽrŽ_9ljîÁ)fœaçšq‘\îW»7ØÁ-fÜiÆ}f&4cÒØð»0¥sLgÆŒ±a?¾jsÚÁ|v°°,æKÙÇ·cÃÛ°‚|×ÖpŽuc#çØÌŒ­ÍØÞŒ]|öô^ìëNüÈŒƒ<‹CíãvðK3~úœìYœnÆ9f\è{p™{p•s\ï7›q‡÷º9ÇïãIçxÎŒ?›ñŠ}¼êo9Ç{Îño3>õûàsSÃL ¿“L LaÓšñe3f1c3æ5c!wbQçXÒŒo™±üÔð[°²«‡Á:ö±¡ljÆVöñ}ûØÙöð·cç8À>ôýø¹iÇšq‚cÜÓ܃³íà3.5ãJïÂufÜd·›qûñ süÎ9ž0ãY;xÁ9^vŽø ñ¦s¼kÆ¿<‹OÌgZx3ÆŸú˜ØŒÉ͘&ô#øÒ´°3;ÇìÎ1g± wáëv°„ß´åÌXiZøa53Ö¶ƒ ÌøžwaKçØÎ9vò^ìî{ÛÇþvðSçø™sáYcÇûM0ÚŒSÍ8Ë=8ß9.qŽ+ÜkÝíã6ç¸ÛŒÌxÔøƒϸÏ›ñ’üÝ=xÃþéšñ±gŸ9=¼ã…ÁDÓC_4cj3f0ã+fÌfÆÜf,0=Ü‹¯™±¸˘ñ߃cU3Ö2c}ïÂ&flaÛš±£»ùðçØÏ9~â{pˆ‡ÛÁÑžÅqfœä{0ÖŒ3§‡_pž}\lÆoìã3~ëYÜjwùÜoøfîs¶ƒÇœã)3þhq?þj¯9ÇÛÎñ¾÷â?îÁÍøüÌÐÇ„3ÃL:3t0åÌð1}ÌhÆW͘ӳ˜ÏX8Ì#XÌ9–r?¾í¬à|׌5ì`]çØÈ=ØÌýØÚ9¶·]œcOçØ×Œyr'uŽ_˜ñK;øµ{p²œnÆ9~\èY\fW¹×;Ç͞ŞŽvðgñ{3ž´ç܃?ÛÁ+îÁ«Îñ–s¼çüÛ>uŽÏÍ sL0+œÅ$³BS˜1­_žþF˜Å³˜ÃŒyÝ…<‹E=‹%íà[f,o+»«›±ŽlèYljÆVöñ}çØÙŒ=܃}œãߌÍø¹;q¤}r'ØÁ3N³³Ý‰ œãR߃+ã:÷à&3nwî±ÍøOØÇ³îÁ f¼lÆ?ÌxÓ=x×=ø—s|bãÌsŒoÆÄ³C“›1|ivø˜ÙŒÙí`çXÐ9¾îN,aÆ7ÍX.ô#XÉ9Vs'Ö6c÷ã{ö±åìð°sìd»»{›±¿gñSûø™aÇØÁñv0Ú{qªg™q¾—¸W¸×zn4ã6û¸Û=xÀuŽ?ØÇ3fNtŽSÌ8ó8×9.2ãr;¸ÚŒ̸Å>î4ã>߇íã1;xÊ9þè1㯡ÁkîÄÛvð¾{ð;ø¯s|~^؃ C®€Iç…=˜ÒŒéì`Fçøê¼ðm1§ÌgÆÂf,æY,åðm÷`;øî¼ð~¬aƺfldÆfflmÆöîÄ.fìéÛ°¯oÀœã û8ÔŒ_ØÇ/ãמÅɾ§›qŽ\hÆef\e×{nö.Üaƽöñ¿w'žtŽç<‹?ÛÁ+f¼joÙÇ{vðoçøÔ>>7?dL0?ô1‰S˜1íü°_ž~/fqŽ9̘׳XÈŒEÍXÒ7à[α¼{°²¬n똱¡›z[™ñ}3v6c3öq0ã@/~îGú6kÆ ö1Æ>N3ãl;¸À7àR;¸Ò9®³›¼ ·ÛÇ=vð ¿³ƒ'܉gÍxÁ^v?þao:Ç»öñ/3>±q„9Æ_Þƒ‰„=˜Ü¦YÎâKÎ1³³›1{° ûñuçXÂø¦˹+9Çjf¬íl`ß³ƒ-í`;;ØÉ9v·½}'ö7ã§žÅÏìã3Žq'Ž·Ñfœjg™q¾\âN\aƵöq£sÜæYÜmÆf<êoÁ<‹gìàù#xÉ»ðwÏâ çø§gñ¡;ñ±óg. sŒgÆD Ã]ø¢sLæ0ÃÂp/¾â³ÙÇÜα€_³ƒÅÍXƾcÆŠv°ªs¬åë;Ç&flaÛš±ãÂð­°›¿?ð,ösŽŸ8Ç!fnÆÑîÇqfœdcÍ8Ó7à<ç¸ØŒßø\ã¿5ãV;¸Ë¿î÷ xÄ»ð¸OÛÁŸÜ‰Íø›¯›ñŽgñs|ä{ð?çwQèã ‹Â0Ù¢ÐÁTv0½Ìd³š1—}ÌoÆ"vð ÷`éEámXÖ>FœcÏbM3Ös66csÏbûØÁŒ]½ {™ñC3~lÆÁfæå¿ò 8ÑN±ƒ3œã\3.²ƒË݃«ý-¸Án1ãN3îs'v3ã)wâöñçø«}¼æ~¼mïÛÁœã¿f|Þÿ·š1éâÐÁ”‹Ã½˜nq¸ 3:ÇWícN÷`>ûXØ93c)ÏâÛîÄ f|׌5ÌX7œ`#36³ƒ­ÍØžüÿMŠ]|öô,öµÙÁAvþ‹•‘°xœ5Úw¼õÆq[FFF6‘Ð’‘‘õEFF!###£‘QFÙ{fdddäœcŸs8Ç, …HF"#£‘‘ßãåóúõÏóz\ë~ß÷ùÖŸ%I’$Éг’LÞ<+ÉÿÿIšä@rº+èîFpì£<0‚“ÈC#8}Exg»Çùnp±—›1ÆŒkÍï»p“7q»w¹Ç½ä*yjâ¿{Ùã©p§žuƒ½Wíñ†ïÂ;f|à“E…S›1½3›1{TxsÛc¨ð X$*ü]XÜ >ç³XÚ=–¹VvÕÝ`m3Ö7cc÷ØÌ;ØÊwa;{ìdÆnn°§ûF…ßz‡˜q¸wpŒ'ºÁiö8Ë›8Ïù^\æ£ýqŒsƒ‰ö¸Íwú ¸Ç÷»ÇC~þbÆ“îñŒwð‚¯x¯›ñ¶wð¾“F‡g1•Ó™1“³E‡g1Wt¸ùí±°=>c¥¼ƒ/Ùc93V2c5÷XËë™±‘lê{±¥=¶µÇŽfì~OìáMìcÜã`78ÌGÛã3Nuƒ3½‰s͸ЌKýfŒòY\íMŒu ö¸ÕŒ;Üànoâ>7xÐûxÔO¸ÇßÍxÞ=^6ã53Þ2ã=Ÿ}dLè1eLè1mLøNÌhYÝcΘðm˜ÏŒ…ÌXÌŒ%½‰/zËz+ºÇªf¬éëš±¡lbÆÞÄ6ìâ÷`w÷ØÛû»ÇAfüÔ=ŽrãÝà78à Îqƒ ü6\bÆnp•Ïâz3ntƒ[|~cßÙãöø“¸ÁãöxÚÏùmxÉÿ6ãMŸÅ»öøÐŒ)V† ¦Yþ̰2l0KØD0‡{Ì»2|´Ç¢f,á|ÁûXÆg±‚«ø,FÌXÇ;ØÀŒoºÁæÞÁÖöØÞ÷bg{|ß;ØËûÙãÇ>‹ŸxGºÇqfœì³ø™?7ãîñK3~åWÚã:3n0ãf3~í³ø­¿wƒ?ÚãÏfüÕ þæßˆ¸Á?ýð/{üÇŒÿú,þçML¾*<‹™ññUaƒO¬ wðI{̳*Üħìñi÷ø¬=>o/›ñß‹¯zk¸Á×¼ƒ¯›ñ ÷ø–=¾íM|Ç ¾ëßó>~`ÚãGÞÁ¡np„=Žõ>NòYœnÆÙîq¾=.ö&.÷Ƹǵn0ÞŒ›¼ƒÛ͸ˌ{ÍxÀ›xØwá1oâ)÷xÖ/ÚãU3ÞpƒwìñïÂd«C©W‡Ó›1óêp³»ÇÜöXÀ‹¬ßÅÃ&‚ϹÇÒî±¼=V¶ÇêöXÛŒõý6llÍ|/¶rƒí¼‰Ü`7ŸÅžöØ×Œ½ƒCÌ8Ü›8Æ'Úã4ïã,3Îsƒ‹Ì¸ÌŒÑÞÄ5öçLô;q›Üé÷˜q¿3ãh÷8Á=Nõ&Î4ã\7¸Ð—š1ÊŒ«ÍkÆïàV{Üá·án3îsƒÍxÔ ž°Çßý ñ¼=^6ã53Þ2ã=ó#׆Œ)׆waÚµáû1£ÌjÆœfÌç³XhmøÍ±˜w°¤{|ÑËÚcE{¬j5½uí±¡›ø^láÛ¸Án°‹ìnÆÞ=²ÇOÍ8ÊŒãÝã3Î0ãÿF\೸Č+Üã*3®÷YÜh[Ìø#~gÆÜàOf¶>|>¾>lð 7ø¤ó¸Á§ìñéÐGðY{|ÞûøòúðmøŠ=¾jÆf|Í=¾no˜ñ-¿ß6ã;>‹ïÚã{>‹Øã‡~3~ä³8ÔŒ#ÜàXïà${œîMœío‚óíq±—›1Æ›¸Ö÷b¼÷q“Üîwy÷šñ€ÏâaŸÅc>‹§ìñ¬ÏâEŸÅ«f¼aÆ;f|೘,6dLîcúذÇÌn0»=æ¶Ç±á;±ˆ,nÆçÜ`iŸÅòf¬ì«›±¶¬ïllÆf{lgÆNfìæ{Úc_oâ@78Ä 7ã78ѧygÙã<÷¸È—¹Çh{\cƸ#˜èÜfÆîq÷›ñïÂ_|OúßžqìñŠ=^7ãmïà}{LzLeÆtqá&f²ÇlqáYÌåó›±°{|ÆŒ¥ÜàKáNËy+™±šÏb-3Ö‹ ¿6rMÍØÒ=¶õ½ØÑ»Úcobïà3ö›q˜wp´'˜qªÏâL3Îuƒ ý\jÆ(3®v±ÞÁ7¸Õw¸ÇÝö¸Ïšñ¨¼3ÚcV{Ìiù챋yKÚã‹öXÖ+ÚcU3ÖŒߌu}/6tƒMÌØÂ›ØÆŒÜ`3v7co÷ØßŒƒÌø©G™q¼§ø8Ãû8ÇØã’ðlW¸ÁUnp½÷q£=n±Çoìñ;ïànð'3ñ·ÅãöxÚÏy/yÿ¶Ç›öx׌͘bCØcš ¡Ç fÌâs˜1¯,hE7„ß KØã ¡¯e6„¿+˜±Š{ŒØcŸÅ¾ßtƒÍÝ`k7ØÞ;ÛãûöØË÷b?3~ì?ñ]8Ò;8ÎŒ“ÝãgÞÁÏíñ ÷ø¥¿ò>®tëìqƒ{Üì}üÚ=~kßû,þh?›ñWŸÅßìñß…Úã_füÇgñ_{üÏ“o Û6øøÆpŸ°Ç'Ã>‚yÌø”ŸvÏzŸ7ãËnð3¾º1ü&XÃoÀ×|_7ã>‹oÙãÛf|ÇŒïz߳Ǽƒšñ#78ÔŒ#Ì8ÖŒ“|§û.œmÆùîq±—ûbŒwp­Ïb¼¿nòYÜn»|÷ºÁÞÁÃnð˜î1ã~3òYüÅOú xÆ ^°Ç+f¼î³xÛïÛcÒÄðm˜*1ÜÄtö˜É³™1Wbø÷…ùÝca3>“Þ…¥BÁ—챜{¬ä«Ùc-3Ö3c#¿›úmØÒŒm}v´Ç®¾ {xûxØã`{fÆÑÞÄ fœê{q¦{œëM\è—Úc”߆«Ý`¬w0ÁwáVŸÅîq·=î3ãA3õž0ãïnð¼=^6ã5¿o¹Ç{æGn Sš1­3š1ë¦ðý˜Óóm ïÂBf,fÆ’f|Ñg±¬+n ßUí±¦ëz’«ä©‰MÜ` ï`¿;ø,vqƒÝÝ`oï`78ÈŒŸšq”ÏâxŸÅ)ö8#ôœã7àïà3®0ã*3®7ãFß…[ìñ{üÎŒ?˜ñ'÷xÄÛãi3žsƒ—Ìø·¼iÆ»þ½øÐßSøÿc3fØžÅ,ö˜ÃŒy7‡;XÐ=µÇ›Ã·á öXÆ=VpƒUÌqu|/6ðY|Ó›û,¶vƒíÍØÙŒï›±—ûù^üØ?±Ç‘fç{q²ýÿÒFL‡à¬h$€–˜½˜†€–˜€ª˜‘E €ª˜½˜Ö ° ?xœ}ÔKHUQàm™Š&½ŒLd  ÒD8XÖÙƒLDDr½P 4H"ôjæ#ÍÒÒ®WËWÊ¢¤u'*Yp‚’²—P =ÖÚ‹{¹¬ .ûñŸµÖB§Þ'ŒŸh¡¿•Q%{Ÿn>ˆ¿Ð\î ëeõ«ÊÑl_„›©ûD]®¼rî’r4ÑÈ<Ç’1YÍÊ•5²ý‡ãä®#[•£™Mº?nRŽæEº3V f§­Å©`!þDs®±õ1ËVmI´Zf4ëûŸ­Ø@ùÁ\îM‰áû¡Ù×™çæÈö™“”L´„|e¯ò¤²¤¬ò£µ°õE{düüEÊf¶27Så“Ãy”Ìã>Ÿ%£G•£9m̧W‡ïf´3¯ÊÁLJ(?˜Ë=ÿ›•¹EùÁìÌíëuöwõýÑD«ô×§¹DÊÖ¡§>…òƒ™l=œß²åÚÍ‹tì/ØyU2åsnê÷KI\GùÁŒ.¶݈]îWû£¹Ü¡¿òâ'•£Ù·˜/­úÓ/(?˜¸Íγ¦â>+WÆ=ýGøû¡™ÝÌ›=«²ë#åóºÙùÞ‡÷GszØ÷þ©ì:AùÁŒ;Ì—Š¥YÓIõs¹÷§ÉýUÇ©þ`ö]v>¼Û©ÿÁD/óˆû+û‡gœúJùÁÌ>}~ß ÆPÿƒy}l=Ô·óê4åsîéû»oß)G3üÌ¡>¿ÎRýÁ\¿~~¨Ñì~ý}L.ÞFùÁD@÷cuiÔÿhŸ6¡÷ ÍÐû§fr‘êæq?¿Qö$ì¤þsÿ3ÿ`Æ}ýý/ؽžêær/zž4ûóÌ›•JùÁÄ~¿üštÊ6Äò—OX—Ç[©þ`æ°>¿=k©þ`Þ°O›ÏP}Ñœ}¾âçc)?˜1Ê<çYx~Ñ\î_’äL^6ÕÌÓßÿ3 Õ”L<Ôïï¯]CùÑ"ç Þ·Ðû…f޳õ~…ïæÁQdþÒ«ôe ð/ŸC§à¬h$?€–˜à½˜Â4€–˜à½˜Î1ôxœc```h˜6ƒaæ †&pqk8­âZ•æƒäf#É3ürmXÿÇsÿLv°†òßž¼üý@9†hæ·ž÷̲>çæ‚äV¡ùèþÆVaˆ~ ÃZ4ód¼d‚!öƒäÖ£ù_ý¥ç¤KoÁæƒä6¡ÉÏeò‚¹,·Í}©Œ^Bûr ÛÑôë0x¥xpAôƒäv¢Éºãi^ðb?PŽaZøIsxÎPƒèÊ=Ø;ƒa#’ÿ”zÎÒØíªúwãà¬h$€–˜à½˜N€–˜à½˜Mÿxœc```h˜6ƒ¡aÁ .pqk`—öž`ïâ‚äV¡Ê;øâµ Ž"”kØ‚*?Á”Õ{á~)ˆörçf ýfÏà¬h$€–˜à½˜—f€–˜à½˜AfVxœc```h˜6ƒáÁÞ ê à ãV"Ãìã¦$rÖpà¬h$€–˜à½˜û~€–˜à½˜×~$&üˆopen2c-bioframe-4fe9b25/docs/tutorials/000077500000000000000000000000001477525772300201055ustar00rootroot00000000000000open2c-bioframe-4fe9b25/docs/tutorials/tutorial_assign_motifs_to_peaks.ipynb000066400000000000000000010256221477525772300276350ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# How to: assign TF Motifs to ChIP-seq peaks\n", "\n", "This tutorial demonstrates one way to assign CTCF motifs to CTCF ChIP-seq peaks using bioframe.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "\n", "import bioframe" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "base_dir = \"/tmp/bioframe_tutorial_data/\"\n", "assembly = \"GRCh38\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load CTCF ChIP-seq peaks for HFF from ENCODE\n", "\n", "This approach makes use of the `narrowPeak` schema for bioframe.read_table . " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
chromstartendnamescorestrandfc-log10p-log10qrelSummit
0chr194830954148309911.1000.5.04924-1.00.00438185
1chr4130563716130564086.993.5.05052-1.00.00432185
2chr1200622507200622877.591.5.05489-1.00.00400185
3chr5112848447112848817.869.5.05841-1.00.00441185
4chr1145960616145960986.575.5.05955-1.00.00439185
\n", "
" ], "text/plain": [ " chrom start end name score strand fc -log10p -log10q \\\n", "0 chr19 48309541 48309911 . 1000 . 5.04924 -1.0 0.00438 \n", "1 chr4 130563716 130564086 . 993 . 5.05052 -1.0 0.00432 \n", "2 chr1 200622507 200622877 . 591 . 5.05489 -1.0 0.00400 \n", "3 chr5 112848447 112848817 . 869 . 5.05841 -1.0 0.00441 \n", "4 chr1 145960616 145960986 . 575 . 5.05955 -1.0 0.00439 \n", "\n", " relSummit \n", "0 185 \n", "1 185 \n", "2 185 \n", "3 185 \n", "4 185 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ctcf_peaks = bioframe.read_table(\n", " \"https://www.encodeproject.org/files/ENCFF401MQL/@@download/ENCFF401MQL.bed.gz\",\n", " schema=\"narrowPeak\",\n", ")\n", "ctcf_peaks[0:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Get CTCF motifs from JASPAR" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
chromstartendnamescorepvalstrand
0chr11116311182CTCF811406-
1chr11122211241CTCF959804-
2chr11128011299CTCF939728-
3chr11133911358CTCF837455-
\n", "
" ], "text/plain": [ " chrom start end name score pval strand\n", "0 chr1 11163 11182 CTCF 811 406 -\n", "1 chr1 11222 11241 CTCF 959 804 -\n", "2 chr1 11280 11299 CTCF 939 728 -\n", "3 chr1 11339 11358 CTCF 837 455 -" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### CTCF motif: http://jaspar.genereg.net/matrix/MA0139.1/\n", "jaspar_url = \"http://expdata.cmmt.ubc.ca/JASPAR/downloads/UCSC_tracks/2022/hg38/\"\n", "jaspar_motif_file = \"MA0139.1.tsv.gz\"\n", "ctcf_motifs = bioframe.read_table(\n", " jaspar_url + jaspar_motif_file, schema=\"jaspar\", skiprows=1\n", ")\n", "ctcf_motifs[0:4]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overlap peaks & motifs" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "df_peaks_motifs = bioframe.overlap(\n", " ctcf_peaks, ctcf_motifs, suffixes=(\"_1\", \"_2\"), return_index=True\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are often multiple motifs overlapping one ChIP-seq peak, and a substantial number of peaks without motifs:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "fraction of peaks without motifs 0.14\n" ] }, { "data": { "image/png": "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DBjgdAHdunW765ANI0aM0IgRI5xu+06Sk5OVnJysvLw8l7YLAABKD5txcmCoa9euycfH55bLzp49W+aGX8jJyVFgYKAuXLiggIAAl7Zd0mcf4Hqc0QGA0qmwf7+d7oz8u9/9Tvn5+QXm/+c//1G3bt2cbQ4AAMBtnA46p0+f1tChQx3mnTlzRt26dVOzZs1cVhgAAEBxOR10UlNTtXPnTvvdVqdOnVLXrl3VqlUrvffeey4v0F14jg4AANbndGfkGjVqaMOGDercubMkaf369WrXrp1WrFihChVK9dBZDhITE5WYmGi/xgcAAKynSGNd1atXT2lpaercubN69Oihv//97wWGaQAAAPC0QgWd6tWr3zLIXLp0SWvXrrXfYi5J586dc111AAAAxVCooLNgwQI3lwEAAOB6hQo6Q4YMcXcdJY4HBgIAYH3F6j18+fJl5eTkOLzKCgb1BADA+pwOOhcvXtTIkSNVq1YtVa1aVdWrV3d4AQAAlBZOB50JEybo448/1qJFi+Tr66ulS5dq+vTpCgkJ0ZtvvumOGgEAAIrE6dvL165dqzfffFPdunXTk08+qS5duqhRo0YKDw/XihUrNGjQIHfUCQAA4DSnz+icO3dODRo0kCQFBATYbyfv3Lmztm3b5trqAAAAisHpoNOwYUMdP35ckhQREWEf9mHt2rWqVq2aK2tzK4aAAADA+pwOOv/93/+tL7/8UpI0efJke1+dcePGafz48S4v0F246woAAOtzuo/OzcE8Jal79+765ptvlJ6erl/96leKjIx0aXEAAADFUaSxrm66cuWKwsLCFBYW5qp6AAAAXMbpS1d5eXl68cUXVbduXVWtWlXffvutJOn555/X66+/7vICAQAAisrpoPPSSy9p+fLlmjt3rnx8fOzzW7VqpaVLl7q0OAAAgOJwOui8+eabSklJ0aBBg+Tl5WWf37p1a33zzTcuLQ4AAKA4nA46p06dUqNGjQrMz8/P1/Xr111SVEng9nIAAKzP6aDTokULbd++vcD8999/X23btnVJUSWB28sBALA+p++6mjp1qhISEnTq1Cnl5+dr9erVOnTokN58802tW7fOHTUCAAAUidNndPr06aOVK1cqNTVVNptNL7zwgg4ePKi1a9eqR48e7qgRAACgSIr0HJ1evXqpV69erq4FAADApYr8wMD09HQdPHhQNptN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crLy8vJc2i4AACg9SnUfHXeijw4AANZXboMOAACwPoIOAACwLI/30fEU+ugAUv1J60t0e8fn9C7R7QFAuT2jQx8dAACsr9wGHQAAYH0EHQAAYFkEHQAAYFnlNugwqCcAANZXboMOnZEBALC+cht0AACA9RF0AACAZRF0AACAZRF0AACAZTEEBENAAJbGMBdA+VZuz+hw1xUAANZXboMOAACwPoIOAACwLIIOAACwLIIOAACwLIIOAACwLG4v5/ZyoMSU9K3eAFBuz+hwezkAANZXboMOAACwPoIOAACwLIIOAACwLIIOAACwLIIOAACwLIIOAACwLIIOAACwLIIOAACwLJ6MzJORAQA/U9JP8D4+p3eJbq+8KbdndHgyMgAA1ldugw4AALA+gg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsBvVkUE8AZRgDUAJ3Vm7P6DCoJwAA1ldugw4AALA+gg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsSwSddevWqWnTpmrcuLGWLl3q6XIAAEAp4e3pAorrxo0bSkpK0ubNmxUQEKB27dqpX79+CgoK8nRpAADAw8r8GZ2dO3eqRYsWqlu3rvz9/fXggw9qw4YNni4LAACUAh4POtu2bVOfPn0UEhIim82mNWvWFFhn0aJFatCggfz8/BQVFaXt27fbl33//feqW7eufbpevXo6depUSZQOAABKOY8HnYsXLyoyMlILFy685fKVK1dq7NixmjJlivbs2aMuXbooPj5eJ06ckCQZYwq8x2az3XZ7V69eVU5OjsMLAABYk8f76MTHxys+Pv62y+fPn6+hQ4dq2LBhkqQFCxZow4YNWrx4sWbPnq26des6nME5efKkOnTocNv2Zs+erenTp7tuBwDgZ+pPWu/pEtzK6vvnCVb/TI/P6e3R7Xv8jM6dXLt2TRkZGerZs6fD/J49e2rHjh2SpPbt2+vrr7/WqVOn9OOPPyo1NVW9evW6bZuTJ0/WhQsX7K/MzEy37gMAAPAcj5/RuZOzZ88qLy9PwcHBDvODg4N15swZSZK3t7fmzZun7t27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FAAAQMmjjw4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg5QDN26ddPYsWM9XYadMUZPP/20goKCZLPZtHfvXk+X5GD58uWqVq1aiW/3+PHjpfLzKK5ffv8uXbqk3/72twoICJDNZtP58+c9VltpUr9+fS1YsMDTZcBDGOsKsJAPP/xQy5cv15YtW9SwYUPVrFnT0yWVCqGhoTp9+nSZ/Ty2bNmi7t2764cffnAIiqtXr1bFihXt02+88Ya2b9+uHTt2qGbNmgoMDPRAtUDpQtABSpm8vDzZbLYCI3AXxtGjR1WnTp1SOWr19evXPbZtLy8v1a5d22Pbd5egoCCH6aNHj6p58+albgDa69evOwQyoCRx6QplXrdu3TR69GhNmDBBQUFBql27tqZNm2ZffqvLFufPn5fNZrOPnLtlyxbZbDZt2LBBbdu2VaVKlXTfffcpKytL//rXv9S8eXMFBARowIABunTpksP2b9y4oZEjR6patWqqUaOGnnvuOf18CLlr165pwoQJqlu3rqpUqaIOHTo4jNh783LOunXrFBERIV9fX3333Xe33NetW7eqffv28vX1VZ06dTRp0iTduHFDkvTEE09o1KhROnHihGw2m+rXr3/bz2zVqlVq0aKFfH19Vb9+fc2bN8++bPLkyerYsWOB97Ru3VpTp061Ty9btkzNmzeXn5+fmjVrpkWLFhX4zN977z1169ZNfn5+euuttwq0efToUf3mN79RcHCwqlatqpiYGG3atMlhnfr16+vFF1/UwIEDVbVqVYWEhOjVV191WMdms2nx4sWKj49XpUqV1KBBA73//vsF6rn5Hbh5vD/66CNFR0ercuXKiouL06FDhxzanTlzpmrVqiV/f38NGzZMkyZNUps2bW77uRb1e3T16lWNHj1atWrVkp+fnzp37qxdu3bZa+/evbskqXr16rLZbHriiSckOV666tatm+bNm6dt27bJZrOpW7dukqRFixapcePG8vPzU3BwsB555JHb1n/zu7hmzRo1adJEfn5+6tGjhzIzMx3WW7t2raKiouTn56eGDRtq+vTp9u/hzeOxZMkS/eY3v1GVKlU0c+bMW26vMMf2woULevrpp1WrVi0FBATovvvu05dffmlfXpjv0C8tW7ZMgYGBSktLu+N6sIgSGToUcKOuXbuagIAAM23aNHP48GHzxhtvGJvNZjZu3GiMMfbRj/fs2WN/zw8//OAw+vHNkXc7duxoPvnkE7N7927TqFEj07VrV9OzZ0+ze/dus23bNlOjRg0zZ84ch21XrVrVjBkzxnzzzTfmrbfeMpUrV3YYDXzgwIEmLi7ObNu2zRw5csT86U9/Mr6+vubw4cPGGGOWLVtmKlasaOLi4synn35qvvnmG5Obm1tgP0+ePGkqV65sRowYYQ4ePGg++OADU7NmTTN16lRjjDHnz583M2bMMPXq1TOnT582WVlZt/y80tPTTYUKFcyMGTPMoUOHzLJly0ylSpXsI9B/9dVXRpI5cuSI/T1ff/21kWQOHTpkjDEmJSXF1KlTx6xatcp8++23ZtWqVSYoKMgsX77c4TOvX7++fZ1Tp06ZZcuWmcDAQHu7e/fuNUuWLDH79u0zhw8fNlOmTDF+fn7mu+++s68THh5u/P39zezZs82hQ4fMK6+8Yry8vOzH1xhjJJkaNWqY1157zRw6dMg899xzxsvLyxw4cOCW34Gbx7tDhw5my5YtZv/+/aZLly4mLi7O3uZbb71l/Pz8zN/+9jdz6NAhM336dBMQEGAiIyNv+bn+vF1nv0ejR482ISEhJjU11ezfv98MGTLEVK9e3WRnZ5sbN26YVatW2T//06dPm/Pnzxtjfvr+jRkzxhhjTHZ2tnnqqadMbGysOX36tMnOzja7du0yXl5e5u233zbHjx83u3fvNn/5y19uW//N72J0dLTZsWOHSU9PN+3bt3f4XD788EMTEBBgli9fbo4ePWo2btxo6tevb6ZNm+ZwPGrVqmVef/11c/ToUXP8+PFbbu9uxzY/P9906tTJ9OnTx+zatcscPnzYPPPMM6ZGjRomOzvbqe/QzdHA//SnP5mgoCDz2Wef3fZzgLUQdFDmde3a1XTu3NlhXkxMjJk4caIxxrmgs2nTJvs6s2fPNpLM0aNH7fN+//vfm169ejlsu3nz5iY/P98+b+LEiaZ58+bGGGOOHDlibDabOXXqlEN9v/71r83kyZONMT/9cZFk9u7de8f9/J//+R/TtGlTh20lJyebqlWrmry8PGOMMS+//LIJDw+/YzsDBw40PXr0cJg3fvx4ExERYZ9u3bq1mTFjhn168uTJJiYmxj4dGhpq3n77bYc2XnzxRRMbG2uM+f/PfMGCBQ7r/DLo3EpERIR59dVX7dPh4eHmgQcecFinf//+Jj4+3j4tyQwfPtxhnQ4dOpg//OEPDvX8Muj8/HivX7/eSDKXL1+2vz8xMdGhzU6dOhUq6DjzPcrNzTUVK1Y0K1assC+/du2aCQkJMXPnznVo94cffnDY3s+DjjHGjBkzxnTt2tU+vWrVKhMQEGBycnJuW/PP3fwufv755/Z5Bw8eNJLMF198YYwxpkuXLmbWrFkO7/v73/9u6tSpY5+WZMaOHXvX7d3t2H700UcmICDAXLlyxWGdX/3qV+avf/3rbdu91Xfo5ZdfNpMmTTJ16tQx+/btu2ttsA4uXcESWrdu7TBdp04dZWVlFaud4OBgVa5cWQ0bNnSY98t2O3bsKJvNZp+OjY3Vv//9b+Xl5Wn37t0yxqhJkyaqWrWq/bV161YdPXrU/h4fH58C+/BLBw8eVGxsrMO2OnXqpNzcXJ08ebLQ+3jw4EF16tTJYV6nTp3sNUvSoEGDtGLFCkk/3cn1zjvvaNCgQZKk//3f/1VmZqaGDh3qsE8zZ8502CdJio6OvmMtFy9e1IQJExQREaFq1aqpatWq+uabb3TixAmH9WJjYwtMHzx40Ol1funnn3mdOnUkyX58Dx06pPbt2zus/8vpwrR7t+/R0aNHdf36dYdjUrFiRbVv3/6u9d9Njx49FB4eroYNGyohIUErVqwocOn1l7y9vR2OW7NmzVStWjV7LRkZGZoxY4bDsX/qqad0+vRph7bvduxvutNxy8jIUG5urmrUqOGwvWPHjtm/a4X9Ds2bN09//etf9cknn6hVq1aFqg3WQGdkWMIvOzrabDbl5+dLkr1Tr/lZv5nbdYz9eTs2m+2O7RZGfn6+vLy8lJGRIS8vL4dlVatWtf93pUqVHALMrRhjCqxzc5/u9t7CtnPTwIEDNWnSJO3evVuXL19WZmamHnvsMfs+SdJrr72mDh06OLzvl/tYpUqVO9Yyfvx4bdiwQX/+85/VqFEjVapUSY888oiuXbt21/0ozD7fbZ1fHm9JDsf3bp9TYdu90/fodsfwVsfJWf7+/tq9e7e2bNmijRs36oUXXtC0adO0a9euO97mf6vt/vzzmT59uvr161dgHT8/P/t/3+3Y38nPt1WnTh2HPm033ay/sN+hLl26aP369Xrvvfc0adKkIteGsoegA8u75557JEmnT59W27ZtJcmlz1P5/PPPC0w3btxYXl5eatu2rfLy8pSVlaUuXboUazsRERFatWqVwx/AHTt2yN/fX3Xr1nWqnU8++cRh3o4dO9SkSRN7UKlXr57uvfderVixQpcvX9b999+v4OBgST+djahbt66+/fZb+1meotq+fbueeOIJPfzww5Kk3NxcHT9+vMB6t/qMmzVrVmDe4MGDHaZvHu+iaNq0qXbu3KmEhAT7vPT09CK3dzuNGjWSj4+PPvnkEw0cOFDST0E8PT3d3tHYx8dHkuxn3Jzh7e2t+++/X/fff7+mTp2qatWq6eOPP75lUJF+6lyfnp5uP3t16NAhnT9/3v55t2vXTocOHVKjRo2cruVW7nRs27VrpzNnzsjb2/u2nesL+x1q3769Ro0apV69esnLy0vjx493Sf0o/Qg6sLxKlSqpY8eOmjNnjurXr6+zZ8/queeec1n7mZmZSkpK0u9//3vt3r1br776qv0upiZNmmjQoEEaPHiw5s2bp7Zt2+rs2bP6+OOP1apVKz344IOF3s6IESO0YMECjRo1SiNHjtShQ4c0depUJSUlOXUr+jPPPKOYmBi9+OKL6t+/vz777DMtXLjQ4a4p6afLV9OmTdO1a9f08ssvOyybNm2aRo8erYCAAMXHx+vq1atKT0/XDz/8oKSkpELX0qhRI61evVp9+vSRzWbT888/f8szZp9++qnmzp2rhx56SGlpaXr//fe1fv16h3Xef/99RUdHq3PnzlqxYoV27typ119/vdC1/NKoUaP01FNPKTo6WnFxcVq5cqX27dvncAnKFapUqaI//OEPGj9+vIKCghQWFqa5c+fq0qVLGjp0qCQpPDxcNptN69at04MPPqhKlSo5nBG8nXXr1unbb7/Vvffeq+rVqys1NVX5+flq2rTpbd9TsWJFjRo1Sq+88ooqVqyokSNHqmPHjvbg88ILL+i//uu/FBoaqkcffVQVKlTQvn379NVXX9327qo7udOxvf/++xUbG6uHHnpIf/zjH9W0aVN9//33Sk1N1UMPPaTo6OhCf4ekny6L/etf/9IDDzwgb29vjRs3zul6UfbQRwflwt/+9jddv35d0dHRGjNmTJF+kG9n8ODBunz5stq3b6/ExESNGjVKTz/9tH35smXLNHjwYD3zzDNq2rSp+vbtqy+++EKhoaFObadu3bpKTU3Vzp07FRkZqeHDh2vo0KFOh7Z27drpvffe07vvvquWLVvqhRde0IwZM+y3LN/06KOPKjs7W5cuXdJDDz3ksGzYsGFaunSpli9frlatWqlr165avny5GjRo4FQtL7/8sqpXr664uDj16dNHvXr1Urt27Qqs98wzzygjI0Nt27bViy++qHnz5qlXr14O60yfPl3vvvuuWrdurTfeeEMrVqxQRESEU/X83KBBgzR58mQ9++yzateunY4dO6YnnnjC4fKMq8yZM0e//e1vlZCQoHbt2unIkSPasGGDqlevLumnYz99+nRNmjRJwcHBGjlyZKHarVatmlavXq377rtPzZs315IlS/TOO++oRYsWt31P5cqVNXHiRA0cOFCxsbGqVKmS3n33XfvyXr16ad26dUpLS1NMTIw6duyo+fPnKzw8vEj7fqdja7PZlJqaqnvvvVdPPvmkmjRposcee0zHjx+3n2Es7Hfopk6dOmn9+vV6/vnn9corrxSpZpQtNlPYi84A4AH169fX2LFj7zjUhs1m0wcffFAgkLlajx49VLt2bf39739363Y8Zfny5Ro7dmyJDR1RmGMLFBeXrgDgFi5duqQlS5bY+3S888472rRpEw+ZA8oYgg4A3MLNyyYzZ87U1atX1bRpU61atUr333+/p0sD4AQuXQEAAMuiMzIAALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALAsgg4AALCs/wM2yc43oc2ldQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# note that counting motifs per peak can also be handled directly with\n", "# bioframe.count_overlaps but since we re-use df_peaks_motifs below we\n", "# instead use the pandas operations directly\n", "motifs_per_peak = df_peaks_motifs.groupby([\"index_1\"])[\"index_2\"].count().values\n", "\n", "plt.hist(motifs_per_peak, np.arange(0, np.max(motifs_per_peak)))\n", "plt.xlabel(\"number of overlapping motifs per peak\")\n", "plt.ylabel(\"number of peaks\")\n", "plt.semilogy()\n", "\n", "print(\n", " f\"fraction of peaks without motifs \"\n", " f\"{np.round(np.sum(motifs_per_peak==0)/len(motifs_per_peak), 2)}\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Assign the strongest motif to each peak" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# since idxmax does not currently take NA, fill with -1\n", "df_peaks_motifs[\"pval_2\"] = df_peaks_motifs[\"pval_2\"].fillna(-1)\n", "idxmax_peaks_motifs = (\n", " df_peaks_motifs.groupby([\"chrom_1\", \"start_1\", \"end_1\"])[\"pval_2\"].idxmax().values\n", ")\n", "df_peaks_maxmotif = df_peaks_motifs.loc[idxmax_peaks_motifs]\n", "df_peaks_maxmotif[\"pval_2\"].replace(-1, np.nan, inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "stronger peaks tend to have stronger motifs:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.rcParams[\"font.size\"] = 12\n", "df_peaks_maxmotif[\"fc_1\"] = df_peaks_maxmotif[\"fc_1\"].values.astype(\"float\")\n", "plt.scatter(\n", " df_peaks_maxmotif[\"fc_1\"].values,\n", " df_peaks_maxmotif[\"pval_2\"].values,\n", " 5,\n", " alpha=0.5,\n", " lw=0,\n", ")\n", "plt.xlabel(\"ENCODE CTCF peak strength, fc\")\n", "plt.ylabel(\"JASPAR CTCF motif strength \\n (-log10 pval *100)\")\n", "plt.title(\n", " \"corr: \"\n", " + str(np.round(df_peaks_maxmotif[\"fc_1\"].corr(df_peaks_maxmotif[\"pval_2\"]), 2))\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also ask the reverse question: how many motifs overlap a ChIP-seq peak?" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "df_motifs_peaks = bioframe.overlap(\n", " ctcf_motifs, ctcf_peaks, how=\"left\", suffixes=(\"_1\", \"_2\")\n", ")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m = df_motifs_peaks.sort_values(\"pval_1\")\n", "plt.plot(\n", " m[\"pval_1\"].values[::-1],\n", " np.cumsum(pd.isnull(m[\"chrom_2\"].values[::-1]) == 0) / np.arange(1, len(m) + 1),\n", ")\n", "plt.xlabel(\"pval\")\n", "plt.ylabel(\"probability motif overlaps a peak\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### filter peaks overlapping blacklisted regions\n", "\n", "do any of our peaks overlap blacklisted genomic regions?" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
chromstartend
0chr1628903635104
1chr158500875850571
2chr189096108910014
\n", "
" ], "text/plain": [ " chrom start end\n", "0 chr1 628903 635104\n", "1 chr1 5850087 5850571\n", "2 chr1 8909610 8910014" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "blacklist = bioframe.read_table(\n", " \"https://www.encodeproject.org/files/ENCFF356LFX/@@download/ENCFF356LFX.bed.gz\",\n", " schema=\"bed3\",\n", ")\n", "blacklist[0:3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "there appears to be a small spike in the number of peaks close to blacklist regions" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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AgBkJ0AAgOwECACQnQABALITIABAdgIEAMhOgAAA2QkQACA7AQIAZCdAAIDsBAgAkJ0AAQCyEyAAQHYCBADIToAAANkJEAAgOwECAGQnQACA7AQIAJCdAAEAshMgAEB2AgQAyE6AAADZCRAAIDsBAgBkJ0AAgOwECACQXVEB8rOf/SzOOOOMGDlyZPTp0yeGDBkSJ510UqxZs6ar5gcAlKHKYgbv3r07RowYEV/60pfi6KOPjr1798batWvjK1/5Smzbti2uvfbarponAFBGigqQqVOnxtSpU1ttmz17drzyyiuxatUqAQIAHJCSvAdk2LBhUVlZVMsAAD1Yh6qhubk5mpub4+23345169bFww8/HP/4j/+43/FNTU3R1NTUcr6hoaEjuwUAykSHAuTSSy+N7373uxER0bt37/iHf/iHuPjii/c7ftmyZVFbW9uxGfYQxy5a32bbtuVndMNMSq+7j+1A9p9zjge6r4+OK5fHQ3t60rF+VO5/HwfbWnfl8bd32121L4rXoZdgrr766vjJT34S69evjwsuuCAuu+yy+Na3vrXf8TU1NVFfX99yqqur6/CEAYBDX4eeARk5cmSMHDkyIiJmzZoVEb+KjHPPPTeGDx/eZnyhUIhCodCJaQIA5aQkb0KdPHlyfPDBB/Hyyy+X4uYAgDJXkgDZsmVL9OrVK37nd36nFDcHAJS5ol6Cueiii2LAgAExefLkOPLII2Pnzp2xbt26uOeee+KKK65o9+UXAICPKipATjrppPjnf/7n+P73vx+7d++O/v37x6c//em444474k//9E+7ao4AQJkpKkDOP//8OP/887tqLgBAD+HbcAGA7AQIAJCdAAEAshMgAEB2AgQAyE6AAADZCRAAIDsBAgBkJ0AAgOwECACQnQABALITIABAdgIEAMhOgAAA2QkQACA7AQIAZCdAAIDsBAgAkJ0AAQCyEyAAQHYCBADIToAAANkJEAAgOwECAGQnQACA7AQIAJCdAAEAshMgAEB2AgQAyE6AAADZCRAAIDsBAgBkJ0AAgOwECACQnQABALITIABAdgIEAMiuqADZvHlzXHDBBTFmzJjo169fHH300TF37tz46U9/2lXzAwDKUFEBcsstt8S2bdvi8ssvjw0bNsRNN90UO3bsiClTpsTmzZu7ao4AQJmpLGbwt7/97TjiiCNabTvttNPi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PvromDt3bvz0pz9tM/bpp5+OU089Nfr37x+DBg2Kz3/+8/Hyyy+3e7s333xzjBkzJgqFQnzyk5+M2traeP/999uM27FjR5x33nkxbNiw6Nu3b5x00kmxadOmkh/nwerWW2+NioqK6N+/f5vLrHfnPf744zFr1qwYPHhw9OnTJ0aNGhXXX399qzHWufOeeeaZOPPMM6O6ujr69u0bY8aMieuuuy7eeaf1x4Nb6+Ls2bMnrrzyypgxY0YMHz48KioqYsmSJe2O7e61ffTRR+Okk06Kvn37xrBhw+K8886LHTt2FHfAnf4s1YPE9OnT06BBg9J3vvOdtHnz5nThhRemiEhr167t7qkdVP74j/84TZs2La1cuTJt3bo1rVu3Lk2ZMiVVVlamTZs2tYx74YUX0uGHH55+//d/P61fvz7dd999ady4cam6ujrt2LGj1W3ecMMNqaKiItXU1KQtW7akv/3bv029e/dOX/va11qN27dvXxo/fnw65phj0po1a9IjjzyS5s6dmyorK9PWrVuzHH93eu2119LAgQNTdXV16tevX6vLrHfnrV27NvXq1Sudc8456T/+4z/S5s2b0z/90z+l2traljHWufOef/75VFVVlT796U+ne+65J23atCktXrw4HXbYYemP/uiPWsZZ6+K98soraeDAgenkk09u+R22ePHiNuO6e223bt2aKisr09y5c9MjjzyS1qxZk44++ug0fvz4tG/fvgM+3rIIkPXr16eISHfeeWer7dOnT0/V1dXpgw8+6KaZHXzeeOONNtv27NmTjjzyyHTKKae0bJs3b14aNmxYqq+vb9m2bdu29Fu/9VvpyiuvbNm2c+fOVFVVlS666KJWt7l06dJUUVGRnn/++ZZt3/72t1NEpP/6r/9q2fb++++nsWPHpsmTJ5fk+A5ms2fPTnPmzEnnnntumwCx3p3z2muvpX79+qX58+d/7Djr3HnXXHNNioj04osvttp+0UUXpYhIu3btSilZ645obm5Ozc3NKaWU3nzzzf0GSHev7YknnpjGjh2b3n///ZZtP/rRj1JEpJUrVx7w8ZZFgFx44YWpf//+rRYjpZTuvPPOFBHpRz/6UTfN7NAxbdq0NHr06JTSrx50ffr0SRdffHGbcTNmzEijRo1qOb9mzZoUEemJJ55oNe7DLyhcunRpy7ZTTz01nXDCCW1u88Ybb0wRkV577bVSHc5B54477kiHH354qquraxMg1rvzlixZkiIibdu2bb9jrHNpfLjWb775ZqvtV155ZerVq1dqbGy01iWwvwDp7rV97bXXUkSkZcuWtRk7evToNH369AM+xrJ4D8hzzz0Xn/rUp6KysvXnqk2cOLHlcvavvr4+nn766Rg3blxERLz00kvx7rvvtqzfr5s4cWK8+OKLsW/fvoj4v7WdMGFCq3G//du/HcOGDWu19s8999x+bzMi4vnnny/NAR1kduzYEQsXLozly5fHMccc0+Zy6915P/zhD2PIkCHxi1/8IiZNmhSVlZVxxBFHxCWXXNLy9eHWuTTOPffcGDRoUMyfPz9efvnl2LNnT/zgBz+I7373u7FgwYLo16+fte5C3b22H15nf2OL+X1bFgHy1ltvtftFeB9ua+8L9Pg/CxYsiL1798Y111wTEf+3Xvtb05RSvP322y1jC4VC9OvXr92xv772PfV+uvTSS+OEE06I+fPnt3u59e68119/Pd55552YN29enH322fHoo4/GFVdcEbfffnvMmjUrUkrWuUSOPfbYeOKJJ+K5556L4447LgYMGBBz5syJc889N2666aaI8JjuSt29tr9p/8XcB0V9FPvBrKKiokOX9XTf+MY3Yu3atXHzzTfHZz7zmVaXHeiaFrP2Pe1+uu++++KBBx6IZ5555jcen/XuuObm5ti3b18sXrw4Fi1aFBERU6dOjd69e8fChQtj06ZN0bdv34iwzp21bdu2mDNnThx55JFx7733xvDhw+PHP/5x3HDDDdHY2BirV69uGWutu053r+3+xhZzH5TFMyBDhw5tt7p27doVEe2XGhG1tbVxww03xNKlS+Oyyy5r2T506NCIaP//Jnbt2hUVFRUxaNCglrH79u1r8+d3H4799bXvafdTY2NjLFiwIL7+9a9HdXV17N69O3bv3h3vvfdeRETs3r079u7da71L4MM1nDlzZqvtp59+ekT86k8WrXNpLFq0KBoaGuLhhx+OL3zhC3HyySfHFVdcEX//938f3/ve9+Kxxx6z1l2ou9f2N+2/mPugLAJkwoQJ8cILL8QHH3zQavuzzz4bERHjx4/vjmkd1Gpra2PJkiWxZMmSuPrqq1tddtxxx0WfPn1a1u/XPfvss3H88cdHVVVVRPzfa4sfHfvLX/4ydu7c2WrtJ0yYsN/bjCi/+2nnzp3xxhtvxIoVK2Lw4MEtp7vuuiv27t0bgwcPjj/5kz+x3iXQ3uvRERHp/3/TRK9evaxzifzsZz+LsWPHtnla/8QTT4yIaHlpxlp3je5e2w//u7+xRd0HB/x21YPYhg0bUkSku+++u9X20047zZ/htuO6665LEZGuvfba/Y754he/mI444ojU0NDQsu3VV19NvXv3TldddVXLtrfeeitVVVWlSy65pNX1ly1b1ubPvFauXJkiIj355JMt295///00bty49NnPfrYUh3ZQeffdd9OWLVvanGbOnJmqqqrSli1b0rPPPptSst6d9fDDD7d5V39KKf3d3/1dioj0n//5nykl61wK06ZNS8OHD0979uxptX3VqlUpItL999+fUrLWnfVxf4bb3Ws7efLkNH78+Fa/W5944okUEemWW2454GMsiwBJ6Vef+TF48OC0atWqtHnz5vS1r30tRURas2ZNd0/toPKtb30rRUQ67bTT0hNPPNHm9KEXXngh9e/fP5188slpw4YN6V//9V/T+PHjP/aDbq6++uq0devW9M1vfjMVCoV2P+hm3LhxacSIEWnt2rVp48aN6ayzziqbDxE6UO19Doj17rw5c+akQqGQrr/++rRx48a0bNmyVFVVlWbPnt0yxjp33r//+7+nioqKNGXKlJYPIlu6dGnq379/Gjt2bGpqakopWeuO2rBhQ1q3bl363ve+lyIizZs3L61bty6tW7cu7d27N6XU/Wu7ZcuWVFlZmc4666y0cePGtHbt2jRixIie+UFkKf3qw7T+/M//PB111FGpd+/eaeLEiemuu+7q7mkddP7gD/4gRcR+T7/uqaeeSqecckrq27dvGjBgQDrzzDPbfPjQh2666aY0evTo1Lt37zRy5Mi0ePHi9N5777UZ98tf/jJ99atfTUOGDElVVVVpypQpaePGjV1yrAer9gIkJevdWe+880666qqr0ogRI1JlZWUaOXJkqqmpafMD0Tp33ubNm9OMGTPSUUcdlfr06ZNGjx6d/uqv/irt3Lmz1ThrXbxPfOIT+/35/Morr7SM6+61feSRR9KUKVNSVVVVGjJkSPrqV7/a7gddfpyKlP7/i6QAAJmUxZtQAYBDiwABALITIABAdgIEAMhOgAAA2QkQACA7AQIAZCdAAIDsBAgAkJ0AAQCyEyAAQHYCBADI7v8B5af2nsavP4AAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "closest_to_blacklist = bioframe.closest(ctcf_peaks, blacklist)\n", "plt.hist(\n", " closest_to_blacklist[\"distance\"].astype(\"Float64\").astype(\"float\"),\n", " np.arange(0, 1e4, 100),\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "to be safe, let's remove anything +/- 1kb from a blacklisted region" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# first let's select the columns we want for our final dataframe of peaks\n", "# with motifs\n", "df_peaks_maxmotif = df_peaks_maxmotif[\n", " [\n", " \"chrom_1\",\n", " \"start_1\",\n", " \"end_1\",\n", " \"fc_1\",\n", " \"chrom_2\",\n", " \"start_2\",\n", " \"end_2\",\n", " \"pval_2\",\n", " \"strand_2\",\n", " ]\n", "]\n", "# then rename columns for convenience when subtracting\n", "for i in df_peaks_maxmotif.keys():\n", " if \"_1\" in i:\n", " df_peaks_maxmotif.rename(columns={i: i.split(\"_\")[0]}, inplace=True)\n", "\n", "# now subtract, expanding the blacklist by 1kb\n", "df_peaks_maxmotif_clean = bioframe.subtract(\n", " df_peaks_maxmotif, bioframe.expand(blacklist, 1000)\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "there it is! we now have a dataframe containing positions of CTCF ChIP peaks, \n", "including the strongest motif underlying that peak, and after conservative\n", "filtering for proximity to blacklisted regions" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
chromstartendfcchrom_2start_2end_2pval_2strand_2
7chr91247774131247777835.06479chr9124777400124777419450.0+
8chr167701045677014155.06708None<NA><NA>NaNNone
9chr101198595861198599565.08015chr10119859591119859610611.0-
10chr366816327668166975.08233chr36681633266816351741.0-
11chr1650248791502491615.08249None<NA><NA>NaNNone
12chr1941431677414320475.11060chr194143180241431821477.0+
13chr41316448391316452095.11204None<NA><NA>NaNNone
14chr22032395192032398895.11817None<NA><NA>NaNNone
\n", "
" ], "text/plain": [ " chrom start end fc chrom_2 start_2 end_2 \\\n", "7 chr9 124777413 124777783 5.06479 chr9 124777400 124777419 \n", "8 chr1 67701045 67701415 5.06708 None \n", "9 chr10 119859586 119859956 5.08015 chr10 119859591 119859610 \n", "10 chr3 66816327 66816697 5.08233 chr3 66816332 66816351 \n", "11 chr16 50248791 50249161 5.08249 None \n", "12 chr19 41431677 41432047 5.11060 chr19 41431802 41431821 \n", "13 chr4 131644839 131645209 5.11204 None \n", "14 chr2 203239519 203239889 5.11817 None \n", "\n", " pval_2 strand_2 \n", "7 450.0 + \n", "8 NaN None \n", "9 611.0 - \n", "10 741.0 - \n", "11 NaN None \n", "12 477.0 + \n", "13 NaN None \n", "14 NaN None " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_peaks_maxmotif_clean.iloc[7:15]" ] } ], "metadata": { "jupytext": { "formats": "ipynb,md:myst" }, "kernelspec": { "display_name": "Python 3.10", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 4 } open2c-bioframe-4fe9b25/docs/tutorials/tutorial_assign_peaks_to_genes.ipynb000066400000000000000000002167741477525772300274460ustar00rootroot00000000000000{ "cells": [ { "cell_type": "markdown", "id": "57c80a2c", "metadata": {}, "source": [ "# How to: assign ChIP-seq peaks to genes\n", "\n", "This tutorial demonstrates one way to assign CTCF ChIP-seq peaks to the nearest genes using bioframe." ] }, { "cell_type": "code", "execution_count": 1, "id": "ad9ab941", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "import bioframe" ] }, { "cell_type": "code", "execution_count": 72, "id": "562865cc", "metadata": {}, "outputs": [], "source": [ "base_dir = \"/tmp/bioframe_tutorial_data/\"\n", "assembly = \"hg38\"" ] }, { "cell_type": "markdown", "id": "d3dae5c3", "metadata": {}, "source": [ "## Load chromosome sizes\n" ] }, { "cell_type": "code", "execution_count": 74, "id": "6253803a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "chr21 46709983\n", "chr22 50818468\n", "chrX 156040895\n", "chrY 57227415\n", "chrM 16569\n", "Name: length, dtype: int64" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "chromsizes = bioframe.fetch_chromsizes(assembly)\n", "chromsizes.tail()" ] }, { "cell_type": "code", "execution_count": 78, "id": "c74347d2", "metadata": {}, "outputs": [], "source": [ "chromosomes = bioframe.make_viewframe(chromsizes)" ] }, { "cell_type": "markdown", "id": "eb8e2724", "metadata": {}, "source": [ "## Load CTCF ChIP-seq peaks for HFF from ENCODE\n", "\n", "This approach makes use of the `narrowPeak` schema for bioframe.read_table . " ] }, { "cell_type": "code", "execution_count": 3, "id": "48616968", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
chromstartendnamescorestrandfc-log10p-log10qrelSummit
0chr194830954148309911.1000.5.04924-1.00.00438185
1chr4130563716130564086.993.5.05052-1.00.00432185
2chr1200622507200622877.591.5.05489-1.00.00400185
3chr5112848447112848817.869.5.05841-1.00.00441185
4chr1145960616145960986.575.5.05955-1.00.00439185
\n", "
" ], "text/plain": [ " chrom start end name score strand fc -log10p -log10q \\\n", "0 chr19 48309541 48309911 . 1000 . 5.04924 -1.0 0.00438 \n", "1 chr4 130563716 130564086 . 993 . 5.05052 -1.0 0.00432 \n", "2 chr1 200622507 200622877 . 591 . 5.05489 -1.0 0.00400 \n", "3 chr5 112848447 112848817 . 869 . 5.05841 -1.0 0.00441 \n", "4 chr1 145960616 145960986 . 575 . 5.05955 -1.0 0.00439 \n", "\n", " relSummit \n", "0 185 \n", "1 185 \n", "2 185 \n", "3 185 \n", "4 185 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ctcf_peaks = bioframe.read_table(\n", " \"https://www.encodeproject.org/files/ENCFF401MQL/@@download/ENCFF401MQL.bed.gz\",\n", " schema=\"narrowPeak\",\n", ")\n", "ctcf_peaks.head()" ] }, { "cell_type": "code", "execution_count": 83, "id": "5a228b72", "metadata": {}, "outputs": [], "source": [ "# Filter for selected chromosomes:\n", "ctcf_peaks = bioframe.overlap(ctcf_peaks, chromosomes).dropna(subset=[\"name_\"])[\n", " ctcf_peaks.columns\n", "]" ] }, { "cell_type": "markdown", "id": "e39fca85", "metadata": {}, "source": [ "## Get list of genes from UCSC\n", "\n", "UCSC genes are stored in .gtf format." ] }, { "cell_type": "code", "execution_count": 4, "id": "e75ffbb4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
chromsourcefeaturestartendscorestrandframeattributes
47chr1ensGeneCDS6909170005.+0gene_id \"ENSG00000186092\"; transcript_id \"ENST...
112chr1ensGeneCDS182709182746.+0gene_id \"ENSG00000279928\"; transcript_id \"ENST...
114chr1ensGeneCDS183114183240.+1gene_id \"ENSG00000279928\"; transcript_id \"ENST...
116chr1ensGeneCDS183922184155.+0gene_id \"ENSG00000279928\"; transcript_id \"ENST...
122chr1ensGeneCDS185220185350.-2gene_id \"ENSG00000279457\"; transcript_id \"ENST...
\n", "
" ], "text/plain": [ " chrom source feature start end score strand frame \\\n", "47 chr1 ensGene CDS 69091 70005 . + 0 \n", "112 chr1 ensGene CDS 182709 182746 . + 0 \n", "114 chr1 ensGene CDS 183114 183240 . + 1 \n", "116 chr1 ensGene CDS 183922 184155 . + 0 \n", "122 chr1 ensGene CDS 185220 185350 . - 2 \n", "\n", " attributes \n", "47 gene_id \"ENSG00000186092\"; transcript_id \"ENST... \n", "112 gene_id \"ENSG00000279928\"; transcript_id \"ENST... \n", "114 gene_id \"ENSG00000279928\"; transcript_id \"ENST... \n", "116 gene_id \"ENSG00000279928\"; transcript_id \"ENST... \n", "122 gene_id \"ENSG00000279457\"; transcript_id \"ENST... " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "genes_url = (\n", " \"https://hgdownload.soe.ucsc.edu/goldenpath/hg38/bigZips/genes/hg38.ensGene.gtf.gz\"\n", ")\n", "genes = bioframe.read_table(genes_url, schema=\"gtf\").query('feature==\"CDS\"')\n", "\n", "genes.head()\n", "\n", "## Note this functions to parse the attributes of the genes:\n", "# import bioframe.sandbox.gtf_io\n", "# genes_attr = bioframe.sandbox.gtf_io.parse_gtf_attributes(genes['attributes'])" ] }, { "cell_type": "code", "execution_count": 84, "id": "84b4226f", "metadata": {}, "outputs": [], "source": [ "# Filter for selected chromosomes:\n", "genes = bioframe.overlap(genes, chromosomes).dropna(subset=[\"name_\"])[genes.columns]" ] }, { "cell_type": "markdown", "id": "111ff194", "metadata": {}, "source": [ "## Assign each peak to the gene\n", "\n", "![Setup](https://raw.githubusercontent.com/open2c/bioframe/main/docs/figs/closest0.png)\n", "\n", "![Default closests](https://raw.githubusercontent.com/open2c/bioframe/main/docs/figs/closest3.png)\n", "\n", "Here, we want to assign each peak (feature) to a gene (input table)." ] }, { "cell_type": "code", "execution_count": 85, "id": "4d78c70b", "metadata": {}, "outputs": [], "source": [ "peaks_closest = bioframe.closest(genes, ctcf_peaks)" ] }, { "cell_type": "code", "execution_count": 87, "id": "b55e2e12", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.0, 1000.0)" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAGdCAYAAAACMjetAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAmi0lEQVR4nO3df1DU953H8RfyYwUOvicS2GyDFmcYo8W0FnOI8ao9Fb1KmE5vqg1ma6aemjP+2Kr1x6V3tZkLGNtqpuVq1MvEXDQluUns5VKPStocjSeKh9L6M7lOiaKyYtNl0YSCwc/9kfE7t2I+1bj8fj5m9o/97pvd73c/Ik+/7K4xxhgjAAAA3NSQ3t4BAACAvoxYAgAAsCCWAAAALIglAAAAC2IJAADAglgCAACwIJYAAAAsiCUAAACLuN7egd507do1XbhwQSkpKYqJient3QEAALfAGKPLly/L5/NpyJDuP+8zqGPpwoULysrK6u3dAAAAn0BjY6Puueeebn+cQR1LKSkpkj56slNTU3t5bwAAwK1obW1VVlaW+3O8uw3qWLr+q7fU1FRiCQCAfqanXkLDC7wBAAAsiCUAAAALYgkAAMCCWAIAALAglgAAACyIJQAAAAtiCQAAwIJYAgAAsCCWAAAALIglAAAAC2IJAADAglgCAACwIJYAAAAsiCUAAACLuN7egb4g9zs/1xBPknv93Y2ze3FvAABAX8KZJQAAAAtiCQAAwIJYAgAAsCCWAAAALIglAAAAC2IJAADAglgCAACwIJYAAAAsiCUAAAALYgkAAMCCWAIAALAglgAAACyIJQAAAAtiCQAAwIJYAgAAsCCWAAAALIglAAAAC2IJAADAglgCAACwIJYAAAAsiCUAAAALYgkAAMCCWAIAALAglgAAACyIJQAAAAtiCQAAwIJYAgAAsCCWAAAALIglAAAAC2IJAADAglgCAACwIJYAAAAsiCUAAACL246lX/3qV3rwwQfl8/kUExOjn/70pxG3G2O0YcMG+Xw+JSYmaurUqTpx4kTETHt7u5YtW6b09HQlJyeruLhY586di5gJhULy+/1yHEeO48jv96ulpSVi5uzZs3rwwQeVnJys9PR0LV++XB0dHbd7SAAAAB/rtmPp/fff12c/+1mVl5ff9PZNmzZp8+bNKi8v1+HDh+X1ejVjxgxdvnzZnQkEAtqzZ48qKiq0f/9+XblyRUVFRers7HRnSkpKVF9fr8rKSlVWVqq+vl5+v9+9vbOzU7Nnz9b777+v/fv3q6KiQq+88opWrVp1u4cEAADw8cwdkGT27NnjXr927Zrxer1m48aN7rY//vGPxnEc88wzzxhjjGlpaTHx8fGmoqLCnTl//rwZMmSIqaysNMYYc/LkSSPJHDx40J2pqakxkszp06eNMcbs3bvXDBkyxJw/f96d+clPfmI8Ho8Jh8O3tP/hcNhIMlmBl83Ita+7FwAA0Hdd//l9qz/v71RUX7PU0NCgYDCowsJCd5vH49GUKVN04MABSVJdXZ2uXr0aMePz+ZSbm+vO1NTUyHEc5efnuzMTJ06U4zgRM7m5ufL5fO7MzJkz1d7errq6upvuX3t7u1pbWyMuAAAANlGNpWAwKEnKzMyM2J6ZmeneFgwGlZCQoGHDhllnMjIyutx/RkZGxMyNjzNs2DAlJCS4MzcqKytzXwPlOI6ysrI+wVECAIDBpFveDRcTExNx3RjTZduNbpy52fwnmfn/1q9fr3A47F4aGxut+wQAABDVWPJ6vZLU5cxOc3OzexbI6/Wqo6NDoVDIOnPx4sUu93/p0qWImRsfJxQK6erVq13OOF3n8XiUmpoacQEAALCJaixlZ2fL6/WqqqrK3dbR0aHq6mpNmjRJkpSXl6f4+PiImaamJh0/ftydKSgoUDgcVm1trTtz6NAhhcPhiJnjx4+rqanJndm3b588Ho/y8vKieVgAAGAQi7vdL7hy5Yp++9vfutcbGhpUX1+vtLQ0jRgxQoFAQKWlpcrJyVFOTo5KS0uVlJSkkpISSZLjOFqwYIFWrVql4cOHKy0tTatXr9a4ceM0ffp0SdKYMWM0a9YsLVy4UNu2bZMkLVq0SEVFRRo9erQkqbCwUGPHjpXf79f3vvc9/eEPf9Dq1au1cOFCzhgBAICoue1Y+p//+R998YtfdK+vXLlSkjR//nzt3LlTa9asUVtbm5YsWaJQKKT8/Hzt27dPKSkp7tds2bJFcXFxmjNnjtra2jRt2jTt3LlTsbGx7szu3bu1fPly911zxcXFEZ/tFBsbq5/97GdasmSJHnjgASUmJqqkpETf//73b/9ZAAAA+BgxxhjT2zvRW1pbWz96V1zgZQ3xJLnb3904uxf3CgAA2Fz/+R0Oh3vkt0n833AAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFhEPZY+/PBDffvb31Z2drYSExM1atQoPfHEE7p27Zo7Y4zRhg0b5PP5lJiYqKlTp+rEiRMR99Pe3q5ly5YpPT1dycnJKi4u1rlz5yJmQqGQ/H6/HMeR4zjy+/1qaWmJ9iEBAIBBLOqx9NRTT+mZZ55ReXm5Tp06pU2bNul73/uefvSjH7kzmzZt0ubNm1VeXq7Dhw/L6/VqxowZunz5sjsTCAS0Z88eVVRUaP/+/bpy5YqKiorU2dnpzpSUlKi+vl6VlZWqrKxUfX29/H5/tA8JAAAMYjHGGBPNOywqKlJmZqaeffZZd9vf/M3fKCkpSS+88IKMMfL5fAoEAlq7dq2kj84iZWZm6qmnntLixYsVDod111136YUXXtDcuXMlSRcuXFBWVpb27t2rmTNn6tSpUxo7dqwOHjyo/Px8SdLBgwdVUFCg06dPa/To0X9yX1tbW+U4jrICL2uIJ8nd/u7G2dF8SgAAQBRd//kdDoeVmpra7Y8X9TNLkydP1i9+8Qu98847kqRf//rX2r9/v770pS9JkhoaGhQMBlVYWOh+jcfj0ZQpU3TgwAFJUl1dna5evRox4/P5lJub687U1NTIcRw3lCRp4sSJchzHnblRe3u7WltbIy4AAAA2cdG+w7Vr1yocDuvee+9VbGysOjs79eSTT+qhhx6SJAWDQUlSZmZmxNdlZmbqzJkz7kxCQoKGDRvWZeb61weDQWVkZHR5/IyMDHfmRmVlZfrud797ZwcIAAAGlaifWXrppZe0a9cuvfjiizpy5Iief/55ff/739fzzz8fMRcTExNx3RjTZduNbpy52bztftavX69wOOxeGhsbb/WwAADAIBX1M0vf+ta3tG7dOn3ta1+TJI0bN05nzpxRWVmZ5s+fL6/XK+mjM0N33323+3XNzc3u2Sav16uOjg6FQqGIs0vNzc2aNGmSO3Px4sUuj3/p0qUuZ62u83g88ng80TlQAAAwKET9zNIHH3ygIUMi7zY2Ntb96IDs7Gx5vV5VVVW5t3d0dKi6utoNoby8PMXHx0fMNDU16fjx4+5MQUGBwuGwamtr3ZlDhw4pHA67MwAAAHcq6meWHnzwQT355JMaMWKEPvOZz+jo0aPavHmzvvGNb0j66FdngUBApaWlysnJUU5OjkpLS5WUlKSSkhJJkuM4WrBggVatWqXhw4crLS1Nq1ev1rhx4zR9+nRJ0pgxYzRr1iwtXLhQ27ZtkyQtWrRIRUVFt/ROOAAAgFsR9Vj60Y9+pH/4h3/QkiVL1NzcLJ/Pp8WLF+sf//Ef3Zk1a9aora1NS5YsUSgUUn5+vvbt26eUlBR3ZsuWLYqLi9OcOXPU1tamadOmaefOnYqNjXVndu/ereXLl7vvmisuLlZ5eXm0DwkAAAxiUf+cpf6Ez1kCAKD/6fefswQAADCQEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGDRLbF0/vx5Pfzwwxo+fLiSkpL0uc99TnV1de7txhht2LBBPp9PiYmJmjp1qk6cOBFxH+3t7Vq2bJnS09OVnJys4uJinTt3LmImFArJ7/fLcRw5jiO/36+WlpbuOCQAADBIRT2WQqGQHnjgAcXHx+s///M/dfLkSf3gBz/Qn//5n7szmzZt0ubNm1VeXq7Dhw/L6/VqxowZunz5sjsTCAS0Z88eVVRUaP/+/bpy5YqKiorU2dnpzpSUlKi+vl6VlZWqrKxUfX29/H5/tA8JAAAMYjHGGBPNO1y3bp3++7//W2+99dZNbzfGyOfzKRAIaO3atZI+OouUmZmpp556SosXL1Y4HNZdd92lF154QXPnzpUkXbhwQVlZWdq7d69mzpypU6dOaezYsTp48KDy8/MlSQcPHlRBQYFOnz6t0aNH/8l9bW1tleM4ygq8rCGeJHf7uxtn3+nTAAAAusn1n9/hcFipqand/nhRP7P02muvacKECfrqV7+qjIwMjR8/Xjt27HBvb2hoUDAYVGFhobvN4/FoypQpOnDggCSprq5OV69ejZjx+XzKzc11Z2pqauQ4jhtKkjRx4kQ5juPO3Ki9vV2tra0RFwAAAJuox9Lvfvc7bd26VTk5Ofr5z3+uRx99VMuXL9e//uu/SpKCwaAkKTMzM+LrMjMz3duCwaASEhI0bNgw60xGRkaXx8/IyHBnblRWVua+vslxHGVlZd3ZwQIAgAEv6rF07do1ff7zn1dpaanGjx+vxYsXa+HChdq6dWvEXExMTMR1Y0yXbTe6ceZm87b7Wb9+vcLhsHtpbGy81cMCAACDVNRj6e6779bYsWMjto0ZM0Znz56VJHm9XknqcvanubnZPdvk9XrV0dGhUChknbl48WKXx7906VKXs1bXeTwepaamRlwAAABsoh5LDzzwgN5+++2Ibe+8845GjhwpScrOzpbX61VVVZV7e0dHh6qrqzVp0iRJUl5enuLj4yNmmpqadPz4cXemoKBA4XBYtbW17syhQ4cUDofdGQAAgDsVF+07/OY3v6lJkyaptLRUc+bMUW1trbZv367t27dL+uhXZ4FAQKWlpcrJyVFOTo5KS0uVlJSkkpISSZLjOFqwYIFWrVql4cOHKy0tTatXr9a4ceM0ffp0SR+drZo1a5YWLlyobdu2SZIWLVqkoqKiW3onHAAAwK2Ieizdf//92rNnj9avX68nnnhC2dnZevrppzVv3jx3Zs2aNWpra9OSJUsUCoWUn5+vffv2KSUlxZ3ZsmWL4uLiNGfOHLW1tWnatGnauXOnYmNj3Zndu3dr+fLl7rvmiouLVV5eHu1DAgAAg1jUP2epP+FzlgAA6H/6/ecsAQAADCTEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYNHtsVRWVqaYmBgFAgF3mzFGGzZskM/nU2JioqZOnaoTJ05EfF17e7uWLVum9PR0JScnq7i4WOfOnYuYCYVC8vv9chxHjuPI7/erpaWluw8JAAAMIt0aS4cPH9b27dt13333RWzftGmTNm/erPLych0+fFher1czZszQ5cuX3ZlAIKA9e/aooqJC+/fv15UrV1RUVKTOzk53pqSkRPX19aqsrFRlZaXq6+vl9/u785AAAMAg022xdOXKFc2bN087duzQsGHD3O3GGD399NN6/PHH9ZWvfEW5ubl6/vnn9cEHH+jFF1+UJIXDYT377LP6wQ9+oOnTp2v8+PHatWuXjh07pjfeeEOSdOrUKVVWVupf/uVfVFBQoIKCAu3YsUOvv/663n777e46LAAAMMh0Wyw99thjmj17tqZPnx6xvaGhQcFgUIWFhe42j8ejKVOm6MCBA5Kkuro6Xb16NWLG5/MpNzfXnampqZHjOMrPz3dnJk6cKMdx3BkAAIA7Fdcdd1pRUaEjR47o8OHDXW4LBoOSpMzMzIjtmZmZOnPmjDuTkJAQcUbq+sz1rw8Gg8rIyOhy/xkZGe7Mjdrb29Xe3u5eb21tvY2jAgAAg1HUzyw1NjZqxYoV2rVrl4YOHfqxczExMRHXjTFdtt3oxpmbzdvup6yszH0xuOM4ysrKsj4eAABA1GOprq5Ozc3NysvLU1xcnOLi4lRdXa0f/vCHiouLc88o3Xj2p7m52b3N6/Wqo6NDoVDIOnPx4sUuj3/p0qUuZ62uW79+vcLhsHtpbGy84+MFAAADW9Rjadq0aTp27Jjq6+vdy4QJEzRv3jzV19dr1KhR8nq9qqqqcr+mo6ND1dXVmjRpkiQpLy9P8fHxETNNTU06fvy4O1NQUKBwOKza2lp35tChQwqHw+7MjTwej1JTUyMuAAAANlF/zVJKSopyc3MjtiUnJ2v48OHu9kAgoNLSUuXk5CgnJ0elpaVKSkpSSUmJJMlxHC1YsECrVq3S8OHDlZaWptWrV2vcuHHuC8bHjBmjWbNmaeHChdq2bZskadGiRSoqKtLo0aOjfVgAAGCQ6pYXeP8pa9asUVtbm5YsWaJQKKT8/Hzt27dPKSkp7syWLVsUFxenOXPmqK2tTdOmTdPOnTsVGxvrzuzevVvLly933zVXXFys8vLyHj8eAAAwcMUYY0xv70RvaW1t/eiF3oGXNcST5G5/d+PsXtwrAABgc/3ndzgc7pGX1PB/wwEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsAAAAWxBIAAIAFsQQAAGBBLAEAAFgQSwAAABbEEgAAgAWxBAAAYBH1WCorK9P999+vlJQUZWRk6Mtf/rLefvvtiBljjDZs2CCfz6fExERNnTpVJ06ciJhpb2/XsmXLlJ6eruTkZBUXF+vcuXMRM6FQSH6/X47jyHEc+f1+tbS0RPuQAADAIBb1WKqurtZjjz2mgwcPqqqqSh9++KEKCwv1/vvvuzObNm3S5s2bVV5ersOHD8vr9WrGjBm6fPmyOxMIBLRnzx5VVFRo//79unLlioqKitTZ2enOlJSUqL6+XpWVlaqsrFR9fb38fn+0DwkAAAxiMcYY050PcOnSJWVkZKi6ulpf+MIXZIyRz+dTIBDQ2rVrJX10FikzM1NPPfWUFi9erHA4rLvuuksvvPCC5s6dK0m6cOGCsrKytHfvXs2cOVOnTp3S2LFjdfDgQeXn50uSDh48qIKCAp0+fVqjR4/+k/vW2toqx3GUFXhZQzxJ7vZ3N87uhmcCAABEw/Wf3+FwWKmpqd3+eN3+mqVwOCxJSktLkyQ1NDQoGAyqsLDQnfF4PJoyZYoOHDggSaqrq9PVq1cjZnw+n3Jzc92ZmpoaOY7jhpIkTZw4UY7juDM3am9vV2tra8QFAADApltjyRijlStXavLkycrNzZUkBYNBSVJmZmbEbGZmpntbMBhUQkKChg0bZp3JyMjo8pgZGRnuzI3Kysrc1zc5jqOsrKw7O0AAADDgdWssLV26VL/5zW/0k5/8pMttMTExEdeNMV223ejGmZvN2+5n/fr1CofD7qWxsfFWDgMAAAxi3RZLy5Yt02uvvaY333xT99xzj7vd6/VKUpezP83Nze7ZJq/Xq46ODoVCIevMxYsXuzzupUuXupy1us7j8Sg1NTXiAgAAYBP1WDLGaOnSpXr11Vf1y1/+UtnZ2RG3Z2dny+v1qqqqyt3W0dGh6upqTZo0SZKUl5en+Pj4iJmmpiYdP37cnSkoKFA4HFZtba07c+jQIYXDYXcGAADgTsVF+w4fe+wxvfjii/r3f/93paSkuGeQHMdRYmKiYmJiFAgEVFpaqpycHOXk5Ki0tFRJSUkqKSlxZxcsWKBVq1Zp+PDhSktL0+rVqzVu3DhNnz5dkjRmzBjNmjVLCxcu1LZt2yRJixYtUlFR0S29Ew4AAOBWRD2Wtm7dKkmaOnVqxPbnnntOjzzyiCRpzZo1amtr05IlSxQKhZSfn699+/YpJSXFnd+yZYvi4uI0Z84ctbW1adq0adq5c6diY2Pdmd27d2v58uXuu+aKi4tVXl4e7UMCAACDWLd/zlJfxucsAQDQ/wy4z1kCAADoz4glAAAAC2IJAADAglgCAACwIJYAAAAsiCUAAAALYgkAAMCCWAIAALAglgAAACyIJQAAAAtiCQAAwIJYAgAAsCCWAAAALIglAAAAC2IJAADAglgCAACwIJYAAAAsiCUAAAALYgkAAMCCWAIAALAglgAAACyIJQAAAAtiCQAAwIJYAgAAsCCWAAAALIglAAAAC2IJAADAglgCAACwIJYAAAAsiCUAAAALYgkAAMCCWAIAALAglgAAACyIJQAAAAtiCQAAwIJYAgAAsCCWAAAALIglAAAAi7je3oH+4tPrftZl27sbZ3/iuTt5DAAA0HM4swQAAGDBmaU+rifOVN1s7pM+Ju4MZxeBvo3v0cGJWOoBtxIjd3p/3f3N2hOP2Zf+EupL+wIMBAP5e2ogHxs+QizdRLTjpi+J5rHdyX31xF8k/AV2c7fyvPDcgT8D6An95c8ZsXQHBnJUDSa3uo63OtdbL/zvy38e+8tfiP9fb+0zbxLBnRgIfwb64jEQSwNEX/5BeTN3sr+99bV96TEGu2i/O7UnflV+M3fyA6CvnCWOtsH2K/+b6cv/QOpLf1Z6ErEE4Jb+AuzrQRHtM4TR/tre0t1R1Vs/xHsiSO9EX/qzcuO+RPt7ajCIMcaY3t6J3tLa2irHcZQVeFlDPEm9vTsAbqKv/IsaGCj64/fUjft8/ed3OBxWampqtz8+Z5YAABhE+noY9UXEEoA+jb/YAfQ2PsEbAADAglgCAACwIJYAAAAs+n0s/fjHP1Z2draGDh2qvLw8vfXWW729SwAAYADp17H00ksvKRAI6PHHH9fRo0f1l3/5l/rrv/5rnT17trd3DQAADBD9OpY2b96sBQsW6G//9m81ZswYPf3008rKytLWrVt7e9cAAMAA0W8/OqCjo0N1dXVat25dxPbCwkIdOHDgpl/T3t6u9vZ293o4HJYkXWv/oPt2FAAA3JHW1tabXu+pz9Xut7H0+9//Xp2dncrMzIzYnpmZqWAweNOvKSsr03e/+90u289vfaQ7dhEAAESB8/TNt7/33ntyHKfbH7/fxtJ1MTExEdeNMV22Xbd+/XqtXLnSvd7S0qKRI0fq7NmzPfJk4+O1trYqKytLjY2NPfLR9fh4rEXfwnr0HaxF3xEOhzVixAilpaX1yOP121hKT09XbGxsl7NIzc3NXc42XefxeOTxeLpsdxyHP/h9RGpqKmvRR7AWfQvr0XewFn3HkCE989LrfvsC74SEBOXl5amqqipie1VVlSZNmtRLewUAAAaafntmSZJWrlwpv9+vCRMmqKCgQNu3b9fZs2f16KOP9vauAQCAAaJfx9LcuXP13nvv6YknnlBTU5Nyc3O1d+9ejRw58pa+3uPx6Dvf+c5NfzWHnsVa9B2sRd/CevQdrEXf0dNrEWN66n13AAAA/VC/fc0SAABATyCWAAAALIglAAAAC2IJAADAYlDH0o9//GNlZ2dr6NChysvL01tvvdXbuzSglJWV6f7771dKSooyMjL05S9/WW+//XbEjDFGGzZskM/nU2JioqZOnaoTJ05EzLS3t2vZsmVKT09XcnKyiouLde7cuZ48lAGnrKxMMTExCgQC7jbWouecP39eDz/8sIYPH66kpCR97nOfU11dnXs7a9FzPvzwQ337299Wdna2EhMTNWrUKD3xxBO6du2aO8N6dI9f/epXevDBB+Xz+RQTE6Of/vSnEbdH63kPhULy+/1yHEeO48jv96ulpeX2dtYMUhUVFSY+Pt7s2LHDnDx50qxYscIkJyebM2fO9PauDRgzZ840zz33nDl+/Lipr683s2fPNiNGjDBXrlxxZzZu3GhSUlLMK6+8Yo4dO2bmzp1r7r77btPa2urOPProo+ZTn/qUqaqqMkeOHDFf/OIXzWc/+1nz4Ycf9sZh9Xu1tbXm05/+tLnvvvvMihUr3O2sRc/4wx/+YEaOHGkeeeQRc+jQIdPQ0GDeeOMN89vf/tadYS16zj/90z+Z4cOHm9dff900NDSYf/u3fzN/9md/Zp5++ml3hvXoHnv37jWPP/64eeWVV4wks2fPnojbo/W8z5o1y+Tm5poDBw6YAwcOmNzcXFNUVHRb+zpoY+kv/uIvzKOPPhqx7d577zXr1q3rpT0a+Jqbm40kU11dbYwx5tq1a8br9ZqNGze6M3/84x+N4zjmmWeeMcYY09LSYuLj401FRYU7c/78eTNkyBBTWVnZswcwAFy+fNnk5OSYqqoqM2XKFDeWWIues3btWjN58uSPvZ216FmzZ8823/jGNyK2feUrXzEPP/ywMYb16Ck3xlK0nveTJ08aSebgwYPuTE1NjZFkTp8+fcv7Nyh/DdfR0aG6ujoVFhZGbC8sLNSBAwd6aa8GvnA4LEnuf3zY0NCgYDAYsQ4ej0dTpkxx16Gurk5Xr16NmPH5fMrNzWWtPoHHHntMs2fP1vTp0yO2sxY957XXXtOECRP01a9+VRkZGRo/frx27Njh3s5a9KzJkyfrF7/4hd555x1J0q9//Wvt379fX/rSlySxHr0lWs97TU2NHMdRfn6+OzNx4kQ5jnNba9OvP8H7k/r973+vzs7OLv/hbmZmZpf/mBfRYYzRypUrNXnyZOXm5kqS+1zfbB3OnDnjziQkJGjYsGFdZlir21NRUaEjR47o8OHDXW5jLXrO7373O23dulUrV67U3//936u2tlbLly+Xx+PR17/+ddaih61du1bhcFj33nuvYmNj1dnZqSeffFIPPfSQJL43eku0nvdgMKiMjIwu95+RkXFbazMoY+m6mJiYiOvGmC7bEB1Lly7Vb37zG+3fv7/LbZ9kHVir29PY2KgVK1Zo3759Gjp06MfOsRbd79q1a5owYYJKS0slSePHj9eJEye0detWff3rX3fnWIue8dJLL2nXrl168cUX9ZnPfEb19fUKBALy+XyaP3++O8d69I5oPO83m7/dtRmUv4ZLT09XbGxsl6psbm7uUrG4c8uWLdNrr72mN998U/fcc4+73ev1SpJ1Hbxerzo6OhQKhT52Bn9aXV2dmpublZeXp7i4OMXFxam6ulo//OEPFRcX5z6XrEX3u/vuuzV27NiIbWPGjNHZs2cl8X3R0771rW9p3bp1+trXvqZx48bJ7/frm9/8psrKyiSxHr0lWs+71+vVxYsXu9z/pUuXbmttBmUsJSQkKC8vT1VVVRHbq6qqNGnSpF7aq4HHGKOlS5fq1Vdf1S9/+UtlZ2dH3J6dnS2v1xuxDh0dHaqurnbXIS8vT/Hx8REzTU1NOn78OGt1G6ZNm6Zjx46pvr7evUyYMEHz5s1TfX29Ro0axVr0kAceeKDLR2i888477n8AzvdFz/rggw80ZEjkj8LY2Fj3owNYj94Rree9oKBA4XBYtbW17syhQ4cUDodvb21u/bXqA8v1jw549tlnzcmTJ00gEDDJycnm3Xff7e1dGzD+7u/+zjiOY/7rv/7LNDU1uZcPPvjAndm4caNxHMe8+uqr5tixY+ahhx666VtD77nnHvPGG2+YI0eOmL/6q7/iLblR8P/fDWcMa9FTamtrTVxcnHnyySfN//7v/5rdu3ebpKQks2vXLneGteg58+fPN5/61Kfcjw549dVXTXp6ulmzZo07w3p0j8uXL5ujR4+ao0ePGklm8+bN5ujRo+5H+ETreZ81a5a57777TE1NjampqTHjxo3jowNuxz//8z+bkSNHmoSEBPP5z3/efUs7okPSTS/PPfecO3Pt2jXzne98x3i9XuPxeMwXvvAFc+zYsYj7aWtrM0uXLjVpaWkmMTHRFBUVmbNnz/bw0Qw8N8YSa9Fz/uM//sPk5uYaj8dj7r33XrN9+/aI21mLntPa2mpWrFhhRowYYYYOHWpGjRplHn/8cdPe3u7OsB7d480337zpz4j58+cbY6L3vL/33ntm3rx5JiUlxaSkpJh58+aZUCh0W/saY4wxn+AMGQAAwKAwKF+zBAAAcKuIJQAAAAtiCQAAwIJYAgAAsCCWAAAALIglAAAAC2IJAADAglgCAACwIJYAAAAsiCUAAAALYgkAAMCCWAIAALD4Pxjpf0OS2UyVAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the distribution of distances from peaks to genes:\n", "plt.hist(peaks_closest[\"distance\"], np.arange(0, 1e3, 10))\n", "plt.xlim([0, 1e3])" ] }, { "cell_type": "markdown", "id": "8cec3987", "metadata": {}, "source": [ "## Ignore upstream/downstream peaks from genes (strand-indifferent version)\n", "\n", "Sometimes you may want to ignore all the CTCFs upstream from the genes. \n", "\n", "By default, `bioframe.overlap` does not know the orintation of the genes, and thus assumes that the upstream/downstream is defined by the genomic coordinate (upstream is the direction towards the smaller coordinate):\n", "\n", "![Closests with ignoring](https://raw.githubusercontent.com/open2c/bioframe/main/docs/figs/closest2.png)\n" ] }, { "cell_type": "code", "execution_count": 88, "id": "e99e5213", "metadata": {}, "outputs": [], "source": [ "peaks_closest_upstream_nodir = bioframe.closest(\n", " genes,\n", " ctcf_peaks,\n", " ignore_overlaps=False,\n", " ignore_upstream=False,\n", " ignore_downstream=True,\n", " direction_col=None,\n", ")\n", "\n", "peaks_closest_downstream_nodir = bioframe.closest(\n", " genes,\n", " ctcf_peaks,\n", " ignore_overlaps=False,\n", " ignore_upstream=True,\n", " ignore_downstream=False,\n", " direction_col=None,\n", ")" ] }, { "cell_type": "markdown", "id": "2fa693c9", "metadata": {}, "source": [ "Note that distribution did not change much, and upstream and downstream distances are very similar:" ] }, { "cell_type": "code", "execution_count": 92, "id": "aa438234", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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jtxut/k5duxYXTcLAADAVO8jUI899pgef/xx3X///ZKkzp076+jRo0pLS9PYsWPldDolXRhBatu2rfm9oqIic1TK6XSqoqJCxcXFHqNQRUVF6t27t1lz4sSJGus/efJkjdGti+x2u+x2e63zAAAA6qreR6DOnj2rFi08F+vj42M+xiAmJkZOp1OZmZnm/IqKCmVlZZnhKD4+Xn5+fh41BQUF2r9/v1mTkJAgt9utXbt2mTU7d+6U2+02awAAABpCvY9AjRgxQk8//bTatWunW265RXv37tXixYv10EMPSbpw2i01NVXz589XbGysYmNjNX/+fAUGBio5OVmS5HA4NH78eM2YMUPh4eEKCwvTzJkz1blzZw0cOFCS1LFjRw0dOlQTJkzQihUrJEkTJ05UYmJine7AAwAA+L7qPUAtXbpUTz75pCZPnqyioiK5XC5NmjRJv/71r82aWbNmqaysTJMnT1ZxcbF69uypjRs3Kjg42KxZsmSJfH19NXLkSJWVlWnAgAFavXq1fHx8zJq1a9dq2rRp5t16SUlJWrZsWX1vEgAAgId6fw5Uc8JzoAAAaH6uyudAAQAAXO0IUAAAABYRoAAAACwiQAEAAFhEgAIAALCIAAUAAGARAQoAAMAiAhQAAIBFBCgAAACLCFAAAAAWEaAAAAAsIkABAABYRIACAACwiAAFAABgEQEKAADAIgIUAACARQQoAAAAiwhQAAAAFhGgAAAALCJAAQAAWESAAgAAsIgABQAAYBEBCgAAwCICFAAAgEUEKAAAAIsIUAAAABYRoAAAACwiQAEAAFhEgAIAALCIAAUAAGARAQoAAMAiAhQAAIBFBCgAAACLCFAAAAAWEaAAAAAsIkABAABYRIACAACwiAAFAABgEQEKAADAIgIUAACARQQoAAAAiwhQAAAAFjVIgPryyy/14IMPKjw8XIGBgeratatycnLM+YZhaO7cuXK5XAoICFC/fv104MABj2WUl5dr6tSpioiIUFBQkJKSkvTFF1941BQXFyslJUUOh0MOh0MpKSk6depUQ2wSAACAqd4DVHFxse644w75+fnp73//uw4ePKjnnntOrVu3NmsWLlyoxYsXa9myZdq9e7ecTqcGDRqk06dPmzWpqalat26d0tPTtW3bNpWWlioxMVFVVVVmTXJysnJzc5WRkaGMjAzl5uYqJSWlvjcJ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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(\n", " peaks_closest_upstream_nodir[\"distance\"],\n", " np.arange(0, 1e4, 100),\n", " alpha=0.5,\n", " label=\"upstream\",\n", ")\n", "plt.hist(\n", " peaks_closest_downstream_nodir[\"distance\"],\n", " np.arange(0, 1e4, 100),\n", " alpha=0.5,\n", " label=\"downstream\",\n", ")\n", "plt.xlim([0, 1e4])\n", "plt.legend()" ] }, { "cell_type": "markdown", "id": "4f130a50", "metadata": {}, "source": [ "## Ignore upstream/downstream peaks from genes (strand-aware version)\n", "\n", "More biologically relevant approach will be to **define upstream/downstream by strand of the gene**.\n", "CTCF upstream of transcription start site might play different role than CTCF after transcription end site. \n", "\n", "`bioframe.closest` has the parameter `direction_col` to control for that: \n", "\n", "![Closests with smart ignoring](https://raw.githubusercontent.com/open2c/bioframe/main/docs/figs/closest1.png)\n" ] }, { "cell_type": "code", "execution_count": 90, "id": "b47d83fa", "metadata": {}, "outputs": [], "source": [ "# Note that \"strand\" here is the column name in genes table:\n", "peaks_closest_upstream_dir = bioframe.closest(\n", " genes,\n", " ctcf_peaks,\n", " ignore_overlaps=False,\n", " ignore_upstream=False,\n", " ignore_downstream=True,\n", " direction_col=\"strand\",\n", ")\n", "\n", "peaks_closest_downstream_dir = bioframe.closest(\n", " genes,\n", " ctcf_peaks,\n", " ignore_overlaps=False,\n", " ignore_upstream=True,\n", " ignore_downstream=False,\n", " direction_col=\"strand\",\n", ")" ] }, { "cell_type": "code", "execution_count": 96, "id": "f18e706a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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7e2t9957Ty1btlTfvn01cuRIjRgxQvPmzbM6JAAAPOqRRx7Rr371K3388ce65557dPfdd2vv3r2SpOeee05r167V3//+d33++edatWqVGZR27NghSVq+fLmKi4vN95L05Zdf6u9//7veeOMNcxJj2LBhKikp0bp165SXl6cePXpowIAB+v777yWdnfQYOnSoNmzYoF27dmnw4MEaPny4ioqK3Pq7YMEC9e3bV7t27dKwYcOUkpKiMWPG6J577tHOnTt13XXXacyYMTIMo4H33KXD8jVQ8fHxlnbg119/XautZcuWWrRo0QUfeBkSEqJVq1ZdcNsdOnTQu+++W+++/JD/+9eXahnYynzf3M6HAwAuLXfeead++9vfSpL+9Kc/KSsrS4sWLdLzzz+voqIiRUVFqV+/fvLy8lLHjh3N9dq2bStJatOmjRwOh9s2q6qqtHLlSrPmX//6lz799FOVlpaa1/fOmzdPb731lv7xj39o4sSJuvHGG3XjjTea2/jzn/+sNWvWaO3atZoyZYrZPnToUE2aNEmS9Oijj2rJkiW66aabdOedd0qSZs2apbi4OB0+fLhWv65UzfshCwAAXILi4uJqvT83AzVu3Djl5+erU6dOSk1N1fr16+u1zY4dO5rhSTp75/vx48cVGhqqVq1ama/CwkJ99dVXks7+esjMmTPVpUsXtWnTRq1atdJnn31Wawaqa9eu5n+fuxErJiamVltpaWl9d8Fljx8TBgDAghYtWtQ6E1Ofi7rPPWKnR48eKiws1Pvvv68NGzZo5MiRGjhwoP7xj39ccP3AwEC392fOnFG7du20cePGWrXnfjf23E1c8+bN03XXXSd/f3/9+te/VlVVlVu9r69vrX7W1XbmzJkfHeeVggAFAIAFbdu2dbsDvLy8XIWFhW41ubm5GjNmjNv7c9cOS1Lr1q01atQojRo1Sr/+9a81ZMgQff/99woJCZGvr69qamp+tB89evRQSUmJfHx8zGuozrd582aNGzdOv/zlLyWdvSaqrktrYB0BCgAAC2699VatWLFCw4cPV3BwsB555BG3m6Ak6fXXX1fPnj3Vr18/rV69Wtu3b9fLL78s6ewF2+3atVO3bt3UokULvf7663I4HOas0TXXXKMPPvhAffv2lc1mq/XLHecMHDhQcXFxGjFihJ566il16tRJ33zzjdatW6cRI0aoZ8+euu666/Tmm29q+PDh8vLy0iOPPMIskodwDRQAABbMnj1bN998sxITEzV06FCNGDFC//M//+NW89hjjykjI0Ndu3bVK6+8otWrV6tLly6SpFatWumpp55Sz549ddNNN+nrr7/WunXrzN9+e/bZZ5WVlaX27du7zVqdz8vLS+vWrdPNN9+se++9Vz/72c9011136euvvzavWVqwYIGCg4PVp08fDR8+XIMHD1aPHj0aaM9cWbyMK/iexPLyctntds1dk8ddeADQyE6dOqXCwkJFRkaqZcuWTd0dj+FJ4p5xob+Pc9/fLperyZ79yAwUAACARQQoAAAAi7iIHAAAD7qCr4y5ojADBQAAYBEBCgAAwCICFAAAgEUEKAAAAIsIUAAAABYRoAAAACwiQAEA4AHx8fFKS0tr6m6gkfAcKABA8/JheuN+3i2zG/fzGtnXX3+tyMhI7dq1S926dWvq7lw2mIECAACqqqpq6i5cUghQAABYdOLECY0ZM0atWrVSu3bt9Oyzz7otLysr05gxYxQcHKyAgADddttt+uKLLySdfVJ527Zt9cYbb5j13bp1U3h4uPk+JydHvr6+On78uKSzP1D80ksv6Ze//KUCAgIUFRWltWvXun3e6NGj1bZtW/n7+ysqKkrLly+XJEVGRkqSunfvLi8vL8XHx0uSxo0bpxEjRig9PV1Op1M/+9nPJEmHDh3SqFGjFBwcrNDQUN1+++36+uuvzc/asWOHBg0apLCwMNntdvXv3187d+50G7+Xl5eWLl2qxMREBQQEqHPnzsrJydGXX36p+Ph4BQYGKi4uTl999dXFHIYmRYACAMCiBx98UB9++KHWrFmj9evXa+PGjcrLyzOXjxs3Th999JHWrl2rnJwcGYahoUOHqrq6Wl5eXrr55pu1ceNGSWfDz549e1RdXa09e/ZIkjZu3KjY2Fi1atXK3OZjjz2mkSNH6pNPPtHQoUM1evRoff/995KkRx55RHv27NH777+vvXv3asmSJQoLC5Mkbd++XZK0YcMGFRcX68033zS3+cEHH2jv3r3KysrSu+++q5MnT+qWW25Rq1attGnTJm3ZskWtWrXSkCFDzBmqY8eOaezYsdq8ebNyc3MVFRWloUOH6tixY2776E9/+pPGjBmj/Px8XX/99UpOTtakSZM0e/ZsffTRR5KkKVOmePKwNCqugQIAwILjx4/r5Zdf1l//+lcNGjRIkvTKK6/o6quvliR98cUXWrt2rf7973+rT58+kqTVq1erffv2euutt3TnnXcqPj5ey5YtkyRt2rRJN954ozp06KCNGzeqS5cu2rhxozlTdM64ceN09913S5Lmzp2rRYsWafv27RoyZIiKiorUvXt39ezZU5J0zTXXmOu1bdtWkhQaGiqHw+G2zcDAQL300kvy8/OTJP3lL39RixYt9NJLL8nLy0uStHz5crVp00YbN25UQkKCbr31VrdtLF26VMHBwcrOzlZiYqLZ/pvf/EYjR46UJM2aNUtxcXF65JFHNHjwYEnSAw88oN/85jdWd3+zwQwUAAAWfPXVV6qqqlJcXJzZFhISok6dOkmS9u7dKx8fH/Xq1ctcHhoaqk6dOmnv3r2Szt6xt3v3bn377bfKzs5WfHy84uPjlZ2drdOnT2vr1q3q37+/2+d27drV/O/AwEAFBQWptLRUkvS73/1OGRkZ6tatm2bOnKmtW7fWaywxMTFmeJKkvLw8ffnllwoKClKrVq3UqlUrhYSE6NSpU+bpttLSUt1333362c9+JrvdLrvdruPHj6uoqOgH+xsREWF+3n+3nTp1SuXl5fXqa3PDDBQAABYYhvGTlhuGYc7qREdHKzQ0VNnZ2crOztbjjz+u9u3b64knntCOHTtUUVGhfv36ua3v6+vr9t7Ly0tnzpyRJN12223av3+/3nvvPW3YsEEDBgzQ/fffr3nz5l2wr4GBgW7vz5w5o9jYWK1evbpW7bmZrHHjxunIkSNauHChOnbsKJvNpri4uFoXof93f8+Nu662c2O41DADBQCABdddd518fX2Vm5trtpWVlWnfvn2SpC5duuj06dPatm2bufy7777Tvn371LlzZ0kyr4N6++23VVBQoF/84heKiYlRdXW1XnjhBfXo0UNBQUGW+tW2bVuNGzdOq1at0sKFC81ThOdmmGpqan50Gz169NAXX3yh8PBwXXfddW4vu90uSdq8ebNSU1M1dOhQ3XDDDbLZbPr2228t9fVyQIACAMCCVq1aafz48XrwwQf1wQcfqKCgQOPGjVOLFme/UqOionT77bdrwoQJ2rJliz7++GPdc889uuqqq3T77beb24mPj9err76qrl27qnXr1maoWr16da3rn37Mo48+qrfffltffvmldu/erXfffdcMa+Hh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0kUpKSl65pln9P3332vGjBmaMGECwQgAADQoywHqo48+0i233GK+nzZtmiRp7NixWrFihWbOnKmKigpNnjxZZWVl6tWrl9avX6+goCBznQULFsjHx0cjR45URUWFBgwYoBUrVsjb29usWb16tVJTU8279ZKSktyePeXt7a333ntPkydPVt++feXv76/k5GTNmzfP+l4AAACwwMswDKOpO9FUysvLZbfblbVoigL9bWZ73HhCGAAAzdW572+Xy9VkZ534LTwAAACLCFAAAAAWEaAAAAAsIkABAABYRIACAACwiAAFAABgEQEKAADAIgIUAACARQQoAAAAiwhQAAAAFhGgAAAALCJAAQAAWESAAgAAsIgABQAAYBEBCgAAwCICFAAAgEUEKAAAAIsIUAAAABYRoAAAACwiQAEAAFhEgAIAALCIAAUAAGARAQoAAMAiAhQAAIBFBCgAAACLCFAAAAAWEaAAAAAsIkABAABYRIACAACwiAAFAABgEQEKAADAIgIUAACARQQoAAAAiwhQAAAAFhGgAAAALCJAAQAAWESAAgAAsIgABQAAYBEBCgAAwCICFAAAgEUEKAAAAIs8HqBOnz6tP/zhD4qMjJS/v7+uvfZaPf744zpz5oxZYxiG5syZI6fTKX9/f8XHx2v37t1u26msrNTUqVMVFhamwMBAJSUl6eDBg241ZWVlSklJkd1ul91uV0pKio4ePerpIQEAALjxeIB66qmn9MILL2jx4sXau3evnn76aT3zzDNatGiRWfP0009r/vz5Wrx4sXbs2CGHw6FBgwbp2LFjZk1aWprWrFmjjIwMbdmyRcePH1diYqJqamrMmuTkZOXn5yszM1OZmZnKz89XSkqKp4cEAADgxsswDMOTG0xMTFRERIRefvlls+1Xv/qVAgICtHLlShmGIafTqbS0NM2aNUvS2dmmiIgIPfXUU5o0aZJcLpfatm2rlStXatSoUZKkb775Ru3bt9e6des0ePBg7d27V126dFFubq569eolScrNzVVcXJw+++wzderU6Uf7Wl5eLrvdrqxFUxTobzPb48bP8+QuAQAAHnTu+9vlcql169ZN0gePz0D169dPH3zwgfbt2ydJ+vjjj7VlyxYNHTpUklRYWKiSkhIlJCSY69hsNvXv319bt26VJOXl5am6utqtxul0Kjo62qzJycmR3W43w5Mk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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(\n", " peaks_closest_upstream_dir[\"distance\"],\n", " np.arange(0, 1e4, 100),\n", " alpha=0.5,\n", " label=\"upstream\",\n", ")\n", "plt.hist(\n", " peaks_closest_downstream_dir[\"distance\"],\n", " np.arange(0, 1e4, 100),\n", " alpha=0.5,\n", " label=\"downstream\",\n", ")\n", "plt.xlim([0, 1e4])\n", "plt.legend()" ] }, { "cell_type": "markdown", "id": "65b4a264", "metadata": {}, "source": [ "CTCF peaks upstream of the genes are more enriched at short distances to TSS, if we take the strand into account." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 5 } open2c-bioframe-4fe9b25/pyproject.toml000066400000000000000000000054231477525772300200470ustar00rootroot00000000000000[build-system] requires = ["hatchling", "hatch-vcs"] build-backend = "hatchling.build" [project] name = "bioframe" version = "0.8.0" description = "Operations and utilities for Genomic Interval Dataframes." license = {text = "MIT"} authors = [ {name = "Open2C", email = "open.chromosome.collective@gmail.com"}, ] keywords = [ "pandas", "dataframe", "genomics", "epigenomics", "bioinformatics", "interval operations", "genomic ranges", "bedtools", "bedframe", "viewframe", "bed", ] classifiers = [ "Development Status :: 4 - Beta", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ] readme = "README.md" requires-python = ">=3.8" dependencies = [ "matplotlib", "numpy>=1.10, <3", "pandas>=1.3", "pyyaml", "requests", "typing-extensions ; python_version<'3.9'", "importlib-metadata ; python_version<'3.8'", "importlib-resources ; python_version<'3.9'", ] [project.optional-dependencies] dev = [ "biopython", "pre-commit", "pysam", "pybbi", "pytest", "ruff", ] test = [ "pytest", ] docs = [ "autodocsumm", "myst_nb", "jinja2", "Sphinx", "sphinx-autobuild", "sphinx_rtd_theme", ] [project.urls] homepage = "https://github.com/open2c/bioframe" documentation = "https://bioframe.readthedocs.io/en/latest" repository = "https://github.com/open2c/bioframe" changelog = "https://github.com/open2c/bioframe/blob/main/CHANGES.md" [tool.ruff] target-version = "py37" exclude = [ ".venv", ] [tool.ruff.lint] extend-select = [ "B", # bugbear # "C", # mccabe complexity # "D", # pydocstyle "E", # style errors "F", # pyflakes "I", # isort "RUF", # ruff-specific rules "UP", # pyupgrade "W", # style warnings ] [tool.ruff.lint.isort] known-first-party = ["bioframe"] [tool.ruff.lint.pydocstyle] convention = "numpy" [tool.pytest.ini_options] minversion = "7" log_cli_level = "info" xfail_strict = true addopts = [ "-ra", "--showlocals", "--strict-config", "--strict-markers", ] filterwarnings = ["ignore::PendingDeprecationWarning"] testpaths = ["tests"] [tool.hatch.envs.default] features = ["dev", "test", "docs"] [tool.hatch.envs.default.scripts] fix = "ruff check --fix ." lint = "ruff check bioframe tests" format = "ruff format bioframe tests" test = "pytest ." docs = "sphinx-autobuild docs docs/_build/html" [tool.hatch.envs.test] features = ["dev", "test"] [[tool.hatch.envs.test.matrix]] python = ["3.9", "3.10", "3.11", "3.12"] open2c-bioframe-4fe9b25/tests/000077500000000000000000000000001477525772300162715ustar00rootroot00000000000000open2c-bioframe-4fe9b25/tests/test_assembly_info.py000066400000000000000000000026411477525772300225370ustar00rootroot00000000000000import pandas as pd import pytest from bioframe.io.assembly import GenomeAssembly, assemblies_available, assembly_info def test_assemblies_available(): assemblies = assemblies_available() assert isinstance(assemblies, pd.DataFrame) for col in ["provider", "provider_build", "default_roles", "default_units"]: assert col in assemblies.columns def test_assembly_info(): hg38 = assembly_info("hg38") assert isinstance(hg38, GenomeAssembly) assert hg38.provider == "ucsc" assert hg38.provider_build == "hg38" assert isinstance(hg38.chromsizes, pd.Series) assert isinstance(hg38.chromnames, list) assert isinstance(hg38.alias_dict, dict) assert isinstance(hg38.seqinfo, pd.DataFrame) for col in ["name", "length", "aliases", "role", "unit"]: assert col in hg38.seqinfo.columns assert isinstance(hg38.viewframe, pd.DataFrame) for col in ["chrom", "start", "end", "name"]: assert col in hg38.viewframe.columns hg38 = assembly_info("ucsc.hg38", roles=("assembled", "unlocalized")) assert isinstance(hg38, GenomeAssembly) with pytest.raises(ValueError): assembly_info("ncbi.hg38") # provider-name mismatch assert isinstance(hg38.cytobands, pd.DataFrame) for col in ["chrom", "start", "end", "band", "stain"]: assert col in hg38.cytobands.columns sacCer3 = assembly_info("sacCer3") assert sacCer3.cytobands is None open2c-bioframe-4fe9b25/tests/test_bed.py000066400000000000000000000155541477525772300204460ustar00rootroot00000000000000import os import tempfile import pandas as pd import pytest import bioframe def test_involution(): with tempfile.TemporaryDirectory() as directory: for schema in ['narrowPeak', 'bed12']: bf = bioframe.read_table(f'tests/test_data/{schema}.bed', schema=schema) fname = os.path.join(directory, f'{schema}.bed') bioframe.to_bed(bf, fname) involution = bioframe.read_table(fname, schema=schema) pd.testing.assert_frame_equal(bf, involution) def test_chrom_validators(): with tempfile.TemporaryDirectory() as directory: bf = bioframe.read_table('tests/test_data/bed12.bed', schema='bed12') bf.loc[0, 'chrom'] = 'value with space' with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) bf.loc[0, 'chrom'] = '' # must be non empty with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) bf.loc[0, 'chrom'] = 'a'*300 # must be shorter than 256 with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) def test_end_validators(): with tempfile.TemporaryDirectory() as directory: bf = bioframe.read_table('tests/test_data/bed12.bed', schema='bed12') bf.loc[0, 'end'] = 10 # end must be after start bf.loc[0, 'start'] = 11 with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) def test_name_validators(): with tempfile.TemporaryDirectory() as directory: bf = bioframe.read_table('tests/test_data/bed12.bed', schema='bed12') bf.loc[0, 'name'] = '' # must not be empty with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) bf.loc[0, 'name'] = 'a'*300 # must be less than 255 char with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) def test_score_validators(): with tempfile.TemporaryDirectory() as directory: bf = bioframe.read_table('tests/test_data/bed12.bed', schema='bed12') # negative value is enforced by the normal types bf.loc[0, 'score'] = 1001 with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed'), strict_score=True) bf['score'] = '.' # enforced to be a number by the types with pytest.raises(TypeError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) def test_strand_validators(): with tempfile.TemporaryDirectory() as directory: bf = bioframe.read_table('tests/test_data/bed12.bed', schema='bed12') bf.loc[0, 'strand'] = '*' with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) def test_thick_validators(): with tempfile.TemporaryDirectory() as directory: for direction in ['Start', 'End']: bf = bioframe.read_table('tests/test_data/bed12.bed', schema='bed12') bf.loc[0, 'start'] = 100 bf.loc[0, 'end'] = 1000 bf.loc[0, f'thick{direction}'] = 1001 with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) bf.loc[0, f'thick{direction}'] = 99 with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) def test_itemRgb_validators(): with tempfile.TemporaryDirectory() as directory: bf = bioframe.read_table('tests/test_data/bed12.bed', schema='bed12') bf["itemRgb"] = bf["itemRgb"].astype(str) bf.loc[0, 'itemRgb'] = 'a,12,13' # must be integers with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) bf.loc[0, 'itemRgb'] = '12,13' # must be 1 or 3 integers with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) bf.loc[0, 'itemRgb'] = '12,13,14,15' # must be 1 or 3 integers with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) bf.loc[0, 'itemRgb'] = '12,13,300' # must be between 0 and 255 with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) bf.loc[0, 'itemRgb'] = '300' # must be between 0 and 255 with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) def test_blockCount_validators(): with tempfile.TemporaryDirectory() as directory: bf = bioframe.read_table('tests/test_data/bed12.bed', schema='bed12') bf.loc[0, 'blockCount'] = 0 with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) def test_blockSizes_validators(): with tempfile.TemporaryDirectory() as directory: bf = bioframe.read_table('tests/test_data/bed12.bed', schema='bed12') bf.loc[0, 'blockCount'] = 2 bf.loc[0, 'blockSizes'] = '2,a,' with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) bf.loc[0, 'blockCount'] = 2 bf.loc[0, 'blockSizes'] = '2,2,2,' with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) def test_blockStarts_validators(): with tempfile.TemporaryDirectory() as directory: bf = bioframe.read_table('tests/test_data/bed12.bed', schema='bed12') bf.loc[0, 'blockCount'] = 2 bf.loc[0, 'blockSizes'] = '2,4,' bf.loc[0, 'blockStarts'] = '0,a,' with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) bf.loc[0, 'blockCount'] = 2 bf.loc[0, 'blockSizes'] = '1,1,' bf.loc[0, 'blockStarts'] = '0,2,5,' with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) # ends after end bf.loc[0, 'start'] = 1 bf.loc[0, 'end'] = 10 bf.loc[0, 'blockCount'] = 1 bf.loc[0, 'blockSizes'] = '100,' bf.loc[0, 'blockStarts'] = '0,' with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) # ends before end bf.loc[0, 'start'] = 1 bf.loc[0, 'end'] = 10 bf.loc[0, 'blockCount'] = 1 bf.loc[0, 'blockSizes'] = '1,' bf.loc[0, 'blockStarts'] = '0,' with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) # overlap bf.loc[0, 'start'] = 1 bf.loc[0, 'end'] = 10 bf.loc[0, 'blockCount'] = 2 bf.loc[0, 'blockSizes'] = '5,5,' bf.loc[0, 'blockStarts'] = '0,1,' with pytest.raises(ValueError): bioframe.to_bed(bf, os.path.join(directory, 'foo.bed')) open2c-bioframe-4fe9b25/tests/test_core_checks.py000066400000000000000000000334161477525772300221610ustar00rootroot00000000000000from io import StringIO import numpy as np import pandas as pd import pytest from bioframe.core.checks import ( is_bedframe, is_cataloged, is_contained, is_covering, is_overlapping, is_sorted, is_tiling, is_viewframe, ) from bioframe.ops import sort_bedframe def test_is_cataloged(): # chr2q is not in view view_df = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], ["chr1", 13, 26, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom", "start", "end", "name"], ) df = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], ["chr1", 5, 15, "chr1p"], ["chr2", 13, 26, "chr2q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom", "start", "end", "view_region"], ) assert not is_cataloged(df, view_df) # chr1q is in view, df_view_col and view_name_col have funny labels. view_df = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], ["chr1", 13, 26, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom", "start", "end", "funny_name"], ) df = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], ["chr2", 13, 26, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom", "start", "end", "funny_view_region"], ) assert is_cataloged( df, view_df, df_view_col="funny_view_region", view_name_col="funny_name" ) def test_is_contained(): view_df = pd.DataFrame( [ ["chr1", 0, 20, "chr1p"], ["chr1", 21, 30, "chr1q"], ["chrX", 1, 10, "chrX_0"], ], columns=["chrom", "start", "end", "name"], ) # not contained because chr2q is not cataloged df = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], ["chr2", 13, 26, "chr2q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom", "start", "end", "view_region"], ) assert not is_contained(df, view_df, df_view_col="view_region") # not contained because second interval falls outside the view regions df = pd.DataFrame( [ ["chr1", 14, 15, "chr1p"], ["chr1", -1, 1, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom", "start", "end", "view_region"], ) assert not is_contained(df, view_df) df = pd.DataFrame( [ ["chr1", 12, 12, "chr1p"], ["chr1", 13, 14, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom", "start", "end", "view_region"], ) # is contained, because assignments are inferred assert is_contained(df, view_df) # using previous assignments with non-standard column names # in dataframes without argument view_df = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], ["chr1", 13, 26, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=["CHROM", "START", "END", "NAME"], ) df = pd.DataFrame( [ ["chr1", 12, 12, "chr1p"], ["chr1", 13, 14, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom1", "start1", "end1", "VIEW_REGION"], ) assert is_contained( df, view_df, cols=["chrom1", "start1", "end1"], cols_view=["CHROM", "START", "END"], df_view_col="VIEW_REGION", view_name_col="NAME", ) with pytest.raises(TypeError): # cols and view_cols are not passed as an arguments is_contained(df, view_df, raise_errors=True) # is not contained, because assignments are not inferred view_df = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], ["chr1", 13, 26, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom", "start", "end", "name"], ) assert not is_contained(df, view_df, df_view_col="view_region") # second interval falls completely out of the view df = pd.DataFrame( [ ["chr1", 12, 12, "chr1p"], ["chr1", 100, 101, "chr1q"], ], columns=["chrom", "start", "end", "view_region"], ) # fails due to NAs after overlap to infer the regions with pytest.raises(AssertionError): is_contained(df, view_df, raise_errors=True) # fails due to some of the intervals being trimmed with pytest.raises(ValueError): is_contained(df, view_df, df_view_col="view_region", raise_errors=True) def test_is_overlapping(): # interval on chr1 overlaps d = """chrom start end 0 chr1 3 6 1 chr1 5 10 2 chr2 5 10""" df = pd.read_csv(StringIO(d), sep=r"\s+") assert is_overlapping(df) # adjacent intervals do not overlap d = """chrom start end 0 chr1 3 6 1 chr1 6 10 2 chr2 5 10""" df = pd.read_csv(StringIO(d), sep=r"\s+") assert not is_overlapping(df) def test_is_covering(): # test is_covering where an interval from df completely overlaps # two different regions from view df1 = pd.DataFrame( [ ["chr1", -5, 25], ], columns=["chrom", "start", "end"], ) chromsizes = [("chr1", 0, 9, "chr1p"), ("chr1", 11, 20, "chr1q")] assert is_covering(df1, chromsizes) # test is_covering where two intervals from df overlap # two different regions from view df1 = pd.DataFrame( [ ["chr1", -5, 10], ["chr1", 11, 12], ["chr1", 12, 20], ], columns=["chrom", "start", "end"], ) chromsizes = [("chr1", 0, 9, "chr1p"), ("chr1", 11, 20, "chr1q")] assert is_covering(df1, chromsizes) # test is_covering with non-standard columns names df1 = pd.DataFrame( [ ["chr1", -5, 10], ["chr1", 11, 12], ["chr1", 12, 20], ], columns=["chrom1", "start1", "end1"], ) chromsizes = pd.DataFrame( [["chr1", 0, 9, "chr1p"], ["chr1", 11, 20, "chr1q"]], columns=["CHROM", "START", "END", "NAME"], ) assert is_covering( df1, chromsizes, cols=["chrom1", "start1", "end1"], cols_view=["CHROM", "START", "END"], view_name_col="NAME", ) with pytest.raises(ValueError): # cols and view_cols are not passed as an arguments is_covering(df1, chromsizes) # test is_covering where two intervals from df overlap # two different regions from view df1 = pd.DataFrame( [ ["chr1", -5, 10, "chr1q"], ["chr1", 11, 12, "chr1q"], ["chr1", 12, 20, "chr1q"], ], columns=["chrom", "start", "end", "view_region"], ) chromsizes = [("chr1", 0, 9, "chr1p"), ("chr1", 11, 20, "chr1q")] assert is_covering(df1, chromsizes) def test_is_tiling(): # view region chr1p is tiled by one interval, chr1q is tiled by two df1 = pd.DataFrame( [ ["chr1", 0, 9, "chr1p"], ["chr1", 11, 12, "chr1q"], ["chr1", 12, 20, "chr1q"], ], columns=["chrom", "start", "end", "view_region"], ) chromsizes = [("chr1", 0, 9, "chr1p"), ("chr1", 11, 20, "chr1q")] assert is_tiling(df1, chromsizes) # testing for non-standard column names df1 = pd.DataFrame( [ ["chr1", 0, 9, "chr1p"], ["chr1", 11, 12, "chr1q"], ["chr1", 12, 20, "chr1q"], ], columns=["chrom1", "start1", "end1", "view_region"], ) chromsizes = pd.DataFrame( [["chr1", 0, 9, "chr1p"], ["chr1", 11, 20, "chr1q"]], columns=["CHROM", "START", "END", "NAME"], ) assert is_tiling( df1, chromsizes, cols=["chrom1", "start1", "end1"], cols_view=["CHROM", "START", "END"], view_name_col="NAME", ) with pytest.raises(KeyError): # cols and view_cols are not passed as an arguments is_tiling(df1, chromsizes) # not tiling, since (chr1,0,9) is associated with chr1q df1 = pd.DataFrame( [ ["chr1", 0, 9, "chr1q"], ["chr1", 11, 12, "chr1q"], ["chr1", 12, 20, "chr1q"], ], columns=["chrom", "start", "end", "view_region"], ) chromsizes = [("chr1", 0, 9, "chr1p"), ("chr1", 11, 20, "chr1q")] assert not is_tiling(df1, chromsizes) # not tiling, contains overlaps df1 = pd.DataFrame( [ ["chr1", 0, 9, "chr1p"], ["chr1", 11, 13, "chr1q"], ["chr1", 12, 20, "chr1q"], ], columns=["chrom", "start", "end", "view_region"], ) chromsizes = [("chr1", 0, 9, "chr1p"), ("chr1", 11, 20, "chr1q")] assert not is_tiling(df1, chromsizes) # not tiling, since it doesn't cover df1 = pd.DataFrame( [ ["chr1", 11, 12, "chr1q"], ["chr1", 12, 20, "chr1q"], ], columns=["chrom", "start", "end", "view_region"], ) chromsizes = [("chr1", 0, 9, "chr1p"), ("chr1", 11, 20, "chr1q")] assert not is_tiling(df1, chromsizes) def test_is_bedframe(): # missing a column df1 = pd.DataFrame( [ ["chr1", 11], ["chr1", 12], ], columns=["chrom", "start"], ) assert not is_bedframe(df1) # end column has invalid dtype df1 = pd.DataFrame( [ ["chr1", 10, "20"], ["chr1", 10, "12"], ], columns=["chrom", "start", "end"], ) assert not is_bedframe(df1) # second interval start > ends. df1 = pd.DataFrame( [ ["chr1", 10, 20], ["chr1", 15, 10], ], columns=["chrom", "start", "end"], ) assert not is_bedframe(df1) # third interval has a null in one column df1 = pd.DataFrame( [ ["chr1", 10, 20, "first"], ["chr1", 10, 15, "second"], ["chr1", pd.NA, 15, "third"], ], columns=["chrom", "start", "end", "name"], ) # should raise a TypeError if the second column is an object with pytest.raises(TypeError): is_bedframe(df1, raise_errors=True) # should raise a ValueError after recasting to pd.Int64Dtype df1 = df1.astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) with pytest.raises(ValueError): is_bedframe(df1, raise_errors=True) # first interval is completely NA df1 = pd.DataFrame( [ [pd.NA, pd.NA, pd.NA, "first"], ["chr1", 10, 15, "second"], ["chr1", 10, 15, "third"], ], columns=["chrom", "start", "end", "name"], ) df1 = df1.astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) assert is_bedframe(df1) def test_is_viewframe(): # not a bedframe df1 = pd.DataFrame( [ ["chr1", 10, 20, "chr1p"], ["chr1", 15, 10, "chr1q"], ], columns=["chrom", "start", "end", "name"], ) assert not is_viewframe(df1) # no column for region name df1 = pd.DataFrame( [ ["chr1", 10, 20], ["chr1", 30, 40], ], columns=["chrom", "start", "end"], ) assert not is_viewframe(df1) # contains null values df1 = pd.DataFrame( [ ["chr1", 10, 20, "chr1p"], ["chr1", pd.NA, np.nan, "chr1q"], ], columns=["chrom", "start", "end", "name"], ) assert not is_viewframe(df1) # overlapping intervals df1 = pd.DataFrame( [ ["chr1", 10, 20, "chr1p"], ["chr1", 15, 25, "chr1q"], ], columns=["chrom", "start", "end", "name"], ) assert not is_viewframe(df1) # valid view df1 = pd.DataFrame( [ ["chr1", 10, 20, "chr1p"], ["chr1", 20, 25, "chr1q"], ["chr2", 20, 25, "chrTEST_2p"], ], columns=["chrom", "start", "end", "name"], ) assert is_viewframe(df1) def test_is_sorted(): view_df = pd.DataFrame( [ ["chrX", 1, 8, "oranges"], ["chrX", 8, 20, "grapefruit"], ["chr1", 0, 10, "apples"], ], columns=["chrom", "start", "end", "fruit"], ) df_view_cat = pd.CategoricalDtype( categories=["oranges", "grapefruit", "apples"], ordered=True ) view_df = view_df.astype({"fruit": df_view_cat}) assert is_sorted( view_df, view_df=view_df, view_name_col="fruit", df_view_col="fruit" ) # testing for non-standard column names view_df = pd.DataFrame( [ ["chrX", 1, 8, "oranges"], ["chrX", 8, 20, "grapefruit"], ["chr1", 0, 10, "apples"], ], columns=["CHROM", "START", "END", "FRUIT"], ) assert is_sorted( view_df, view_df=view_df, view_name_col="FRUIT", df_view_col="FRUIT", cols=["CHROM", "START", "END"], cols_view=["CHROM", "START", "END"], ) with pytest.raises(ValueError): # cols and view_cols are not passed as an arguments is_sorted(view_df, view_df=view_df) df = pd.DataFrame( [ ["chr1", 0, 10, "+"], ["chrX", 5, 10, "+"], ["chrX", 0, 5, "+"], ["chr2", 5, 10, "+"], ], columns=["chrom", "start", "end", "strand"], ) assert not is_sorted(df) view_df = pd.DataFrame( [ ["chrX", 1, 8, "oranges"], ["chrX", 8, 20, "grapefruit"], ["chr1", 0, 10, "apples"], ], columns=["chrom", "start", "end", "fruit"], ) bfs = sort_bedframe(df, view_df=view_df, view_name_col="fruit") assert is_sorted(bfs, view_df=view_df, view_name_col="fruit") # view_df specifies a different ordering, so should not be sorted assert not is_sorted(bfs) open2c-bioframe-4fe9b25/tests/test_core_construction.py000066400000000000000000000164601477525772300234530ustar00rootroot00000000000000from io import StringIO import numpy as np import pandas as pd import pytest from bioframe.core import construction from bioframe.core.construction import from_any def test_add_ucsc_name_column(): df = pd.DataFrame( {"chrom": [f"chr{i}" for i in range(3)], "start": [1, 2, 3], "end": [4, 5, 6]} ) pd.testing.assert_series_equal( construction.add_ucsc_name_column(df)["name"], pd.Series( data=["chr0:1-4", "chr1:2-5", "chr2:3-6"], index=[0, 1, 2], name="name" ), ) def test_any(): ### tests copied from old parse_regions # main functionality: convert to dataframe and create name df = pd.DataFrame( {"chrom": [f"chr{i}" for i in range(3)], "start": [1, 2, 3], "end": [4, 5, 6]} ) parsed = from_any(df) assert "name" not in parsed.columns assert parsed.iloc[0]["chrom"] == "chr0" # re-create dataframe from UCSC name alone df2 = pd.DataFrame( { "regions": construction.add_ucsc_name_column(parsed, name_col="regions")[ "regions" ].values } ) assert ( (from_any(df2, name_col="regions")[["chrom", "start", "end"]] == parsed) .all() .all() ) # re-parsing results yields the same assert (from_any(parsed) == parsed).all().all() # extra columns don't get overwritten df["name"] = "test-value" assert (from_any(df)["name"] == df["name"]).all() # None or False will be parsed assert from_any([("chr1", None, 5)], fill_null={"chr1": 10})["start"].values[0] == 0 # pull end from chromsizes p2 = from_any([("chr1", 5, None)], fill_null={"chr1": 40}) assert list(p2.values[0]) == ["chr1", 5, 40] # We could keep things as None if chromsizes were not proviced p3 = from_any(["chr1", "chr2"], fill_null=False) assert list(p3.values[0]) == ["chr1", None, None] # parse the strange name p8 = from_any(["chr1:1,000,000-4M"]) assert list(p8.values[0]) == ["chr1", 1000000, 4000000] p9 = from_any(["chr1"]) assert list(p9.values[0]) == ["chr1", None, None] with pytest.raises(ValueError): from_any([("ch1", 1, 2, "chr1:1-2", "puppies")]) # puppies are not allowed with pytest.raises(ValueError): from_any([("chr1", 5, None)], fill_null={"chr2": 40}) # input tuple of tuples p2 = from_any((("chr1", 5, 10), ("chrX", 10, 20))) assert list(p2.values[0]) == ["chr1", 5, 10] # input tuple of lists p2 = from_any((["chr1", 5, 10], ["chrX", 10, 20])) assert list(p2.values[0]) == ["chr1", 5, 10] # input tuple of ucsc strings p2 = from_any(("chr1:5-10",)) assert list(p2.values[0]) == ["chr1", 5, 10] # input single tuple p2 = from_any(("chr1", 5, 10)) assert list(p2.values[0]) == ["chr1", 5, 10] def test_sanitize_bedframe(): df1 = pd.DataFrame( [ ["chr1", 10, 20], ["chr1", 10, 20], ["chr1", 15, np.nan], ["chr1", pd.NA, 25], ], columns=["chrom", "start", "end"], ) # drop rows with null values sanitized_df1 = pd.DataFrame( [["chr1", 10, 20], ["chr1", 10, 20]], columns=["chrom", "start", "end"] ) sanitized_df1 = sanitized_df1.astype( {"chrom": str, "start": pd.Int64Dtype(), "end": pd.Int64Dtype()} ) pd.testing.assert_frame_equal( sanitized_df1, construction.sanitize_bedframe(df1, drop_null=True) ) # keep rows with null, but recast sanitized_df1 = pd.DataFrame( [ ["chr1", 10, 20], ["chr1", 10, 20], [pd.NA, pd.NA, pd.NA], [pd.NA, pd.NA, pd.NA], ], columns=["chrom", "start", "end"], ) sanitized_df1 = sanitized_df1.astype( {"chrom": object, "start": pd.Int64Dtype(), "end": pd.Int64Dtype()} ) pd.testing.assert_frame_equal( sanitized_df1.fillna(-1), construction.sanitize_bedframe(df1).fillna(-1) ) # flip intervals as well as drop NA df1 = pd.DataFrame( [ ["chr1", 20, 10], ["chr1", pd.NA, 25], ], columns=["chrom", "start", "end"], ) sanitized_df1 = pd.DataFrame([["chr1", 10, 20]], columns=["chrom", "start", "end"]) sanitized_df1 = sanitized_df1.astype( {"chrom": str, "start": pd.Int64Dtype(), "end": pd.Int64Dtype()} ) pd.testing.assert_frame_equal( sanitized_df1, construction.sanitize_bedframe( df1, start_exceed_end_action="fLiP", drop_null=True ), ) # flip intervals as well as drop NA df1 = pd.DataFrame( [ ["chr1", 20, 10], ["chr1", pd.NA, 25], ], columns=["chrom", "start", "end"], ) sanitized_df1 = pd.DataFrame([["chr1", 10, 20]], columns=["chrom", "start", "end"]) sanitized_df1 = sanitized_df1.astype( {"chrom": str, "start": pd.Int64Dtype(), "end": pd.Int64Dtype()} ) assert construction.sanitize_bedframe( df1, start_exceed_end_action="drop", drop_null=True ).empty def test_make_viewframe(): # test dict input view_df = pd.DataFrame( [ ["chrTESTX", 0, 10, "chrTESTX:0-10"], ["chrTESTX_p", 0, 12, "chrTESTX_p:0-12"], ], columns=["chrom", "start", "end", "name"], ) pd.testing.assert_frame_equal( view_df.copy(), construction.make_viewframe( {"chrTESTX": 10, "chrTESTX_p": 12}, name_style="ucsc" ), ) # test list input region_list = [("chrTESTX", 0, 10), ("chrTESTX_p", 0, 12)] pd.testing.assert_frame_equal( view_df.copy(), construction.make_viewframe(region_list, name_style="ucsc"), ) # test pd.Series input chromsizes = pd.Series(data=[5, 8], index=["chrTESTXq", "chrTEST_2p"]) d = """ chrom start end name 0 chrTESTXq 0 5 chrTESTXq 1 chrTEST_2p 0 8 chrTEST_2p""" view_df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal( view_df.copy(), construction.make_viewframe(chromsizes, name_style=None) ) d = """ chrom start end name 0 chrTESTXq 0 5 chrTESTXq:0-5 1 chrTEST_2p 0 8 chrTEST_2p:0-8""" view_df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal( view_df.copy(), construction.make_viewframe(chromsizes, name_style="UCSC"), ) # test pd.DataFrame input pd.testing.assert_frame_equal(view_df.copy(), construction.make_viewframe(view_df)) # if you provide unique names, this is accepted unchanged by make_viewframe view_df = pd.DataFrame( [["chrTESTX", 0, 10, "chrTEST_1"], ["chrTESTY", 0, 12, "chrTEST_2"]], columns=["chrom", "start", "end", "name"], ) region_list = [("chrTESTX", 0, 10, "chrTEST_1"), ("chrTESTY", 0, 12, "chrTEST_2")] pd.testing.assert_frame_equal( view_df.copy(), construction.make_viewframe(region_list) ) pd.testing.assert_frame_equal(view_df.copy(), construction.make_viewframe(view_df)) pd.testing.assert_frame_equal( view_df.copy(), construction.make_viewframe( view_df, check_bounds={"chrTESTX": 11, "chrTESTY": 13} ), ) with pytest.raises(ValueError): construction.make_viewframe( view_df, check_bounds={"chrTESTX": 9, "chrTESTY": 13} ) open2c-bioframe-4fe9b25/tests/test_core_specs.py000066400000000000000000000060731477525772300220350ustar00rootroot00000000000000import numpy as np import pandas as pd import pytest import bioframe from bioframe.core import specs def test_get_default_colnames(): assert specs._get_default_colnames() == ("chrom", "start", "end") def test_update_default_colnames(): new_names = ("C", "chromStart", "chromStop") specs.update_default_colnames(new_names) assert specs._get_default_colnames() == new_names # test that with updated default column names, bioframe.ops recognizes df1 df1 = pd.DataFrame( [["chr1", 1, 5], ["chr1", 3, 8], ["chr1", 8, 10], ["chr1", 12, 14]], columns=list(new_names), ) df1_chromsizes = {"chr1": 100, "chrX": 100} df1_complement = pd.DataFrame( [ ["chr1", 0, 1, "chr1"], ["chr1", 10, 12, "chr1"], ["chr1", 14, 100, "chr1"], ["chrX", 0, 100, "chrX"], ], columns=[*list(new_names), "view_region"], ) pd.testing.assert_frame_equal( bioframe.complement(df1, view_df=df1_chromsizes), df1_complement ) # cannot update with just two colujmns with pytest.raises(ValueError): specs.update_default_colnames(("chromosome", "position")) # extra stuff is not allowed with pytest.raises(ValueError): specs.update_default_colnames(["chromosome", "start", "end", "extrasuff"]) # reset to default specs.update_default_colnames(("chrom", "start", "end")) def test_verify_columns(): new_names = ("C", "chromStart", "chromStop") df1 = pd.DataFrame( [["chr1", 1, 5], ["chr1", 3, 8], ["chr1", 8, 10], ["chr1", 12, 14]], columns=list(new_names), ) with pytest.raises(ValueError): specs._verify_columns(df1, specs._get_default_colnames()) assert specs._verify_columns( df1, new_names, return_as_bool=True, ) # no repeated column names with pytest.raises(ValueError): specs._verify_columns(df1, ["chromStart", "chromStart"], unique_cols=True) def test_verify_column_dtypes(): new_names = ("C", "chromStart", "chromStop") df1 = pd.DataFrame( [["chr1", 1, 5], ["chr1", 3, 8], ["chr1", 8, 10], ["chr1", 12, 14]], columns=list(new_names), ) with pytest.raises(ValueError): specs._verify_column_dtypes(df1, specs._get_default_colnames()) assert specs._verify_column_dtypes(df1, new_names, return_as_bool=True) df1["chromStart"] = df1["chromStart"].astype(float) assert not specs._verify_column_dtypes(df1, new_names, return_as_bool=True) df1["chromStart"] = df1["chromStart"].astype(pd.Int64Dtype()) assert specs._verify_column_dtypes(df1, new_names, return_as_bool=True) df1["C"] = df1["C"].str.replace("chr", "").astype(np.int64) assert not specs._verify_column_dtypes(df1, new_names, return_as_bool=True) def test_is_chrom_dtype(): assert specs.is_chrom_dtype(str) fruit = pd.CategoricalDtype( categories=["oranges", "grapefruit", "apples"], ordered=True ) assert specs.is_chrom_dtype(fruit) assert not specs.is_chrom_dtype(int) assert not specs.is_chrom_dtype(float) open2c-bioframe-4fe9b25/tests/test_core_stringops.py000066400000000000000000000047121477525772300227460ustar00rootroot00000000000000import numpy as np import pytest from bioframe.core import stringops from bioframe.core.stringops import parse_region def test_to_ucsc_string(): assert stringops.to_ucsc_string(("chr21", 1, 4)) == "chr21:1-4" def test_parse_region(): # UCSC-style names assert parse_region("chr21") == ("chr21", 0, None) assert parse_region("chr21:1000-2000") == ("chr21", 1000, 2000) assert parse_region("chr21:1,000-2,000") == ("chr21", 1000, 2000) # Ensembl style names assert parse_region("6") == ("6", 0, None) assert parse_region("6:1000-2000") == ("6", 1000, 2000) assert parse_region("6:1,000-2,000") == ("6", 1000, 2000) # FASTA style names assert parse_region("gb|accession|locus") == ("gb|accession|locus", 0, None) assert parse_region("gb|accession|locus:1000-2000") == ( "gb|accession|locus", 1000, 2000, ) assert parse_region("gb|accession|locus:1,000-2,000") == ( "gb|accession|locus", 1000, 2000, ) # Punctuation in names (aside from :) assert parse_region("name-with-hyphens-") == ("name-with-hyphens-", 0, None) assert parse_region("GL000207.1") == ("GL000207.1", 0, None) assert parse_region("GL000207.1:1000-2000") == ("GL000207.1", 1000, 2000) # Trailing dash assert parse_region("chr21:1000-") == ("chr21", 1000, None) # Humanized units assert parse_region("6:1kb-2kb") == ("6", 1000, 2000) assert parse_region("6:1k-2000") == ("6", 1000, 2000) assert parse_region("6:1kb-2M") == ("6", 1000, 2000000) assert parse_region("6:1Gb-") == ("6", 1000000000, None) with pytest.raises(ValueError): parse_region("chr1:2,000-1,000") # reverse selection with pytest.raises(ValueError): parse_region("chr1::1000-2000") # more than one colon def test_parse_region_string(): assert stringops.parse_region_string("6:1kb-2kb") == ("6", 1000, 2000) assert stringops.parse_region_string("6:1,000-2,000") == ("6", 1000, 2000) assert stringops.parse_region_string("c6:1000-2000") == ("c6", 1000, 2000) def test_is_complete_ucsc_string(): assert stringops.is_complete_ucsc_string("chrX:1M-2M") assert not stringops.is_complete_ucsc_string("chrX") assert not stringops.is_complete_ucsc_string("1M-2M") assert not stringops.is_complete_ucsc_string(1000) assert not stringops.is_complete_ucsc_string(np.array([100, 200])) assert not stringops.is_complete_ucsc_string(np.array(["chr1:100-200"])) open2c-bioframe-4fe9b25/tests/test_data/000077500000000000000000000000001477525772300202415ustar00rootroot00000000000000open2c-bioframe-4fe9b25/tests/test_data/bed12.bed000066400000000000000000000067301477525772300216200ustar00rootroot00000000000000chr19 54331773 54620705 5C_304_ENm007_FOR_1.5C_304_ENm007_REV_40 1000 . 54331773 54620705 0 2 14528,19855, 0,269077, chr19 54461360 54620705 5C_304_ENm007_FOR_26.5C_304_ENm007_REV_40 1000 . 54461360 54620705 0 2 800,19855, 0,139490, chr5 131346229 132145236 5C_299_ENm002_FOR_241.5C_299_ENm002_REV_33 1000 . 131346229 132145236 0 2 2609,2105, 0,796902, chr21 35037188 35285017 5C_302_ENm005_FOR_339.5C_302_ENm005_REV_403 1000 . 35037188 35285017 0 2 10878,8825, 0,239004, chr19 54357838 54691409 5C_304_ENm007_FOR_4.5C_304_ENm007_REV_51 1000 . 54357838 54691409 0 2 1055,14125, 0,319446, chr7 115924626 116693495 5C_298_ENm001_FOR_286.5C_298_ENm001_REV_28 1000 . 115924626 116693495 0 2 4890,1441, 0,767428, chr19 54600850 54772278 5C_304_ENm007_FOR_62.5C_304_ENm007_REV_40 1000 . 54600850 54772278 0 2 19855,8187, 0,163241, chr19 54359237 54620705 5C_304_ENm007_FOR_6.5C_304_ENm007_REV_40 1000 . 54359237 54620705 0 2 1949,19855, 0,241613, chr19 54461360 54893239 5C_304_ENm007_FOR_26.5C_304_ENm007_REV_85 1000 . 54461360 54893239 0 2 800,11088, 0,420791, chr7 116754962 117005110 5C_298_ENm001_FOR_383.5C_298_ENm001_REV_305 1000 . 116754962 117005110 0 2 10635,363, 0,249785, chr11 116617499 116757175 5C_300_ENm003_FOR_46.5C_300_ENm003_REV_79 1000 . 116617499 116757175 0 2 2921,19431, 0,120245, chr22 32920308 33427592 5C_301_ENm004_FOR_338.5C_301_ENm004_REV_218 1000 . 32920308 33427592 0 2 7415,8621, 0,498663, chr11 1748200 2195481 5C_308_ENm011_FOR_3.5C_308_ENm011_REV_63 1000 . 1748200 2195481 0 2 5843,9589, 0,437692, chr7 115924626 116158598 5C_298_ENm001_FOR_106.5C_298_ENm001_REV_28 1000 . 115924626 116158598 0 2 4890,1491, 0,232481, chr16 62281851 62641443 5C_997_ENr313_FOR_118.5C_997_ENr313_REV_2 1000 . 62281851 62641443 0 2 2408,2547, 0,357045, chr7 116434729 117617181 5C_298_ENm001_FOR_590.5C_298_ENm001_REV_203 1000 . 116434729 117617181 0 2 19679,7324, 0,1175128, chr7 116544149 116693495 5C_298_ENm001_FOR_286.5C_298_ENm001_REV_236 1000 . 116544149 116693495 0 2 3475,1441, 0,147905, chr11 1789267 2195481 5C_308_ENm011_FOR_8.5C_308_ENm011_REV_63 1000 . 1789267 2195481 0 2 3188,9589, 0,396625, chr7 116434729 116693495 5C_298_ENm001_FOR_286.5C_298_ENm001_REV_203 1000 . 116434729 116693495 0 2 19679,1441, 0,257325, chr7 116849860 117617181 5C_298_ENm001_FOR_590.5C_298_ENm001_REV_342 1000 . 116849860 117617181 0 2 15082,7324, 0,759997, chr22 32544939 33427592 5C_301_ENm004_FOR_338.5C_301_ENm004_REV_131 1000 . 32544939 33427592 0 2 4212,8621, 0,874032, chr19 54429407 54620705 5C_304_ENm007_FOR_20.5C_304_ENm007_REV_40 1000 . 54429407 54620705 0 2 7487,19855, 0,171443, chr19 54764091 54893239 5C_304_ENm007_FOR_62.5C_304_ENm007_REV_85 1000 . 54764091 54893239 0 2 8187,11088, 0,118060, chr16 62431952 62769565 5C_997_ENr313_FOR_46.5C_997_ENr313_REV_159 1000 . 62431952 62769565 0 2 4031,3833, 0,333780, chr21 35029593 35285017 5C_302_ENm005_FOR_337.5C_302_ENm005_REV_403 1000 . 35029593 35285017 0 2 6085,8825, 0,246599, chr5 131346229 132146235 5C_299_ENm002_FOR_242.5C_299_ENm002_REV_33 1000 . 131346229 132146235 0 2 2609,999, 0,799007, chr19 54600850 54703388 5C_304_ENm007_FOR_55.5C_304_ENm007_REV_40 1000 . 54600850 54703388 0 2 19855,7848, 0,94690, chrX 153198557 153625659 5C_303_ENm006_FOR_84.5C_303_ENm006_REV_17 1000 . 153198557 153625659 0 2 15711,11331, 0,415771, chr7 115861595 116766876 5C_298_ENm001_FOR_306.5C_298_ENm001_REV_13 1000 . 115861595 116766876 0 2 9373,1279, 0,904002, chr22 32920308 33282103 5C_301_ENm004_FOR_300.5C_301_ENm004_REV_218 1000 . 32920308 33282103 0 2 7415,1101, 0,360694, open2c-bioframe-4fe9b25/tests/test_data/bed9.bed000066400000000000000000000024141477525772300215410ustar00rootroot00000000000000chr1 193500 194500 . 400 + . . 179,45,0 chr1 618500 619500 . 700 + . . 179,45,0 chr1 974500 975500 . 1000 + . . 179,45,0 chr1 1301500 1302500 . 1000 + . . 179,45,0 chr1 1479500 1480500 . 1000 + . . 179,45,0 chr1 2154500 2155500 . 800 + . . 179,45,0 chr1 2450500 2451500 . 900 + . . 179,45,0 chr1 3719500 3720500 . 700 + . . 179,45,0 chr1 4084500 4085500 . 600 + . . 179,45,0 chr1 6292500 6293500 . 900 + . . 179,45,0 chr1 6507500 6508500 . 900 + . . 179,45,0 chr1 8182500 8183500 . 700 + . . 179,45,0 chr1 8988500 8989500 . 1000 + . . 179,45,0 chr1 9483500 9484500 . 900 + . . 179,45,0 chr1 9815500 9816500 . 900 + . . 179,45,0 chr1 10146500 10147500 . 900 + . . 179,45,0 chr1 11023500 11024500 . 1000 + . . 179,45,0 chr1 11266500 11267500 . 800 + . . 179,45,0 chr1 11971500 11972500 . 1000 + . . 179,45,0 chr1 12172500 12173500 . 1000 + . . 179,45,0 chr1 13145500 13146500 . 400 + . . 179,45,0 chr1 13464500 13465500 . 400 + . . 179,45,0 chr1 14030500 14031500 . 600 + . . 179,45,0 chr1 16068500 16069500 . 900 + . . 179,45,0 chr1 16486500 16487500 . 900 + . . 179,45,0 chr1 16756500 16757500 . 1000 + . . 179,45,0 chr1 17035500 17036500 . 700 + . . 179,45,0 chr1 17306500 17307500 . 700 + . . 179,45,0 chr1 18393500 18394500 . 400 + . . 179,45,0 chr1 19383500 19384500 . 700 + . . 179,45,0 open2c-bioframe-4fe9b25/tests/test_data/jaspar.bed000066400000000000000000000017001477525772300221730ustar00rootroot00000000000000chr1 10470 10489 CTCF 803 390 - chr1 11163 11182 CTCF 811 406 - chr1 11222 11241 CTCF 959 804 - chr1 11280 11299 CTCF 939 728 - chr1 11339 11358 CTCF 837 455 - chr1 11401 11420 CTCF 829 439 - chr1 11413 11432 CTCF 803 390 + chr1 13282 13301 CTCF 800 385 - chr1 14230 14249 CTCF 817 416 - chr1 15227 15246 CTCF 806 396 - chr1 15626 15645 CTCF 830 442 - chr1 16650 16669 CTCF 826 433 + chr1 17091 17110 CTCF 821 423 + chr1 17925 17944 CTCF 806 395 + chr1 18119 18138 CTCF 807 398 + chr1 18357 18376 CTCF 808 400 - chr1 18487 18506 CTCF 810 403 - chr1 19817 19836 CTCF 804 392 - chr1 22561 22580 CTCF 806 396 + chr1 23446 23465 CTCF 800 385 + chr1 23872 23891 CTCF 823 428 - chr1 24781 24800 CTCF 892 584 - chr1 24939 24958 CTCF 828 438 + chr1 26053 26072 CTCF 832 446 - chr1 26085 26104 CTCF 843 468 - chr1 32074 32093 CTCF 803 391 - chr1 34397 34416 CTCF 803 391 - chr1 34941 34960 CTCF 815 412 + chr1 35952 35971 CTCF 807 397 - chr1 36202 36221 CTCF 807 397 + open2c-bioframe-4fe9b25/tests/test_data/narrowPeak.bed000066400000000000000000000034651477525772300230360ustar00rootroot00000000000000chr19 48309541 48309911 . 1000 . 5.04924 -1.00000 0.00438 185 chr4 130563716 130564086 . 993 . 5.05052 -1.00000 0.00432 185 chr1 200622507 200622877 . 591 . 5.05489 -1.00000 0.00400 185 chr5 112848447 112848817 . 869 . 5.05841 -1.00000 0.00441 185 chr1 145960616 145960986 . 575 . 5.05955 -1.00000 0.00439 185 chr9 9912714 9913084 . 563 . 5.06079 -1.00000 0.00434 185 chr6 2744599 2744969 . 795 . 5.06457 -1.00000 0.00401 185 chr9 124777413 124777783 . 1000 . 5.06479 -1.00000 0.00402 185 chr1 67701045 67701415 . 780 . 5.06708 -1.00000 0.00416 185 chr10 119859586 119859956 . 825 . 5.08015 -1.00000 0.00362 185 chr3 66816327 66816697 . 1000 . 5.08233 -1.00000 0.00379 185 chr16 50248791 50249161 . 579 . 5.08249 -1.00000 0.00380 185 chr19 41431677 41432047 . 1000 . 5.11060 -1.00000 0.00876 185 chr4 131644839 131645209 . 1000 . 5.11204 -1.00000 0.00855 185 chr2 203239519 203239889 . 753 . 5.11817 -1.00000 0.00755 185 chr1 108877017 108877387 . 1000 . 5.12519 -1.00000 0.00777 185 chr1 23665426 23665796 . 1000 . 5.12618 -1.00000 0.00712 185 chr15 78415607 78415977 . 1000 . 5.14402 -1.00000 0.00913 185 chr9 3181837 3182207 . 1000 . 5.14438 -1.00000 0.00903 185 chr10 50275876 50276246 . 1000 . 5.14891 -1.00000 0.00867 185 chr17 27388554 27388924 . 1000 . 5.15031 -1.00000 0.00809 185 chr1 241485905 241486275 . 1000 . 5.16030 -1.00000 0.00723 185 chr18 56995779 56996149 . 827 . 5.16128 -1.00000 0.00708 185 chr11 24558049 24558419 . 620 . 5.16788 -1.00000 0.00557 185 chr4 109134575 109134945 . 567 . 5.16876 -1.00000 0.00550 185 chr10 84214795 84215165 . 1000 . 5.17597 -1.00000 0.00540 185 chr20 4233733 4234103 . 1000 . 5.17899 -1.00000 0.00497 185 chr2 130356160 130356530 . 1000 . 5.18574 -1.00000 0.00660 185 chr18 55322509 55322879 . 865 . 5.19245 -1.00000 0.00626 185 chr8 126510457 126510827 . 552 . 5.19561 -1.00000 0.00554 185 open2c-bioframe-4fe9b25/tests/test_data/test.chrom.sizes000066400000000000000000000000261477525772300234040ustar00rootroot00000000000000chrTESTX 5 chrTEST2 7 open2c-bioframe-4fe9b25/tests/test_data/test.fa000066400000000000000000000000421477525772300215240ustar00rootroot00000000000000>chrTESTX AtGcN >chrTEST2 NGATCNN open2c-bioframe-4fe9b25/tests/test_data/test.fa.fai000066400000000000000000000000441477525772300222640ustar00rootroot00000000000000chrTESTX 5 10 5 6 chrTEST2 7 26 7 8 open2c-bioframe-4fe9b25/tests/test_data/toy.bam000066400000000000000000000010211477525772300215270ustar00rootroot00000000000000‹ÿBC€srôeLc``pä ö³*JMãôñ³21åBE ¸Ü9=]¬ŠsKòósŠ9üì0?+C=C3=CNg¸¨BYfj¹‚nR°BI~¥P”‹ h MeÐÒ¬¶ƒµ³UÏ‹‹ÿBCsu’MKÃ@†§­‹Š¸ê*Ṟß^“P©…¢ô(ˆž‹'YO9ö?ø‡¼zö‡èìv–M2ð’0;ó¼³o°Žm’×¾õ=ø‚CÎ].IïÝnRú‰IÉ'uI™(D¬Â诋E2ߢ"ìÕAÀ^˜ºÃNM½FÚÔÃÚ©OÅé™tÌE›oÄkˆ±‰­‚íØ±©óæ›<²…q½2åÎîÔÃï;‡¦ë—š‘¤à ±‡1ê<¢^Ù¯ŒP“ŽY¸²Ž^7Ö`MëŠ~¨Æ\ÇJD’iîyM™—6L+˜£´=?zQ^ÜdJ¡Û%1eP͹ >Ì(?É2‰ ’i©ýÄQ úž¹¨ÙŒ~[ßúM1P‰O”BM<0¹i yê’‡°¢|N‹ìTï¸k¥ AJy‹Váî·oáN\Ü–”·h­ Ú?c¬ä«¦‹ÿBCopen2c-bioframe-4fe9b25/tests/test_data/toy.bam.bai000066400000000000000000000002601477525772300222650ustar00rootroot00000000000000BAIIÊJ’ÊIÊõJ’ÊõÊopen2c-bioframe-4fe9b25/tests/test_data/toy.sam000066400000000000000000000014221477525772300215550ustar00rootroot00000000000000@SQ SN:ref LN:45 @SQ SN:ref2 LN:40 r001 163 ref 7 30 8M4I4M1D3M = 37 39 TTAGATAAAGAGGATACTG * XX:B:S,12561,2,20,112 r002 0 ref 9 30 1S2I6M1P1I1P1I4M2I * 0 0 AAAAGATAAGGGATAAA * r003 0 ref 9 30 5H6M * 0 0 AGCTAA * r004 0 ref 16 30 6M14N1I5M * 0 0 ATAGCTCTCAGC * r003 16 ref 29 30 6H5M * 0 0 TAGGC * r001 83 ref 37 30 9M = 7 -39 CAGCGCCAT * x1 0 ref2 1 30 20M * 0 0 aggttttataaaacaaataa ???????????????????? x2 0 ref2 2 30 21M * 0 0 ggttttataaaacaaataatt ????????????????????? x3 0 ref2 6 30 9M4I13M * 0 0 ttataaaacAAATaattaagtctaca ?????????????????????????? x4 0 ref2 10 30 25M * 0 0 CaaaTaattaagtctacagagcaac ????????????????????????? x5 0 ref2 12 30 24M * 0 0 aaTaattaagtctacagagcaact ???????????????????????? x6 0 ref2 14 30 23M * 0 0 Taattaagtctacagagcaacta ??????????????????????? open2c-bioframe-4fe9b25/tests/test_extras.py000066400000000000000000000273471477525772300212250ustar00rootroot00000000000000import os.path as op import numpy as np import pandas as pd import pytest import bioframe testdir = op.realpath(op.dirname(__file__)) def test_make_chromarms(): ### test the case where columns have different names df = pd.DataFrame( [["chrX", 0, 8]], columns=["chromosome", "lo", "hi"], ) mids = pd.DataFrame([["chrX", 4]], columns=["chromosome", "loc"]) arms = pd.DataFrame( [ ["chrX", 0, 4, "chrX_p"], ["chrX", 4, 8, "chrX_q"], ], columns=["chrom", "start", "end", "name"], ) arms = arms.astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) # test passing 3 columns result = bioframe.make_chromarms( df, mids, cols_chroms=["chromosome", "lo", "hi"], cols_mids=["chromosome", "loc"], ) pd.testing.assert_frame_equal( result, arms.rename(columns={"chrom": "chromosome", "start": "lo", "end": "hi"}) ) # test passing 2 columns result = bioframe.make_chromarms( df, mids, cols_chroms=["chromosome", "hi"], cols_mids=["chromosome", "loc"], ) pd.testing.assert_frame_equal( result, arms.rename(columns={"chrom": "chromosome"}), ) # test for passing Series or dict result = bioframe.make_chromarms( pd.Series({"chrX": 8}), mids, cols_mids=["chromosome", "loc"] ) pd.testing.assert_frame_equal(arms, result) result = bioframe.make_chromarms(pd.Series({"chrX": 8}), pd.Series({"chrX": 4})) pd.testing.assert_frame_equal(arms, result) bioframe.make_chromarms({"chrX": 8}, mids, cols_mids=["chromosome", "loc"]) pd.testing.assert_frame_equal(arms, result) bioframe.make_chromarms({"chrX": 8}, pd.Series({"chrX": 4})) pd.testing.assert_frame_equal(arms, result) bioframe.make_chromarms({"chrX": 8}, {"chrX": 4}) pd.testing.assert_frame_equal(arms, result) def test_binnify(): chromsizes = bioframe.read_chromsizes( testdir + "/test_data/test.chrom.sizes", filter_chroms=False ) assert len(chromsizes) == 2 assert len(bioframe.binnify(chromsizes, int(np.max(chromsizes.values)))) == len( chromsizes ) assert len(bioframe.binnify(chromsizes, int(np.min(chromsizes.values)))) == ( len(chromsizes) + 1 ) assert len(bioframe.binnify(chromsizes, 1)) == np.sum(chromsizes.values) def test_digest(): pytest.importorskip("Bio") fasta_records = bioframe.load_fasta(testdir + "/test_data/test.fa") assert len(fasta_records) == 2 ### no HindIII sites in the test.fa fasta records, so shouldn't change shape[0] assert bioframe.digest(fasta_records, "HindIII").shape == (2, 3) ### one DpnII site on chrTEST2, shape[0] should increase by one assert bioframe.digest(fasta_records, "DpnII").shape == (3, 3) ### DpnII site is on chrTEST2 position 3, first interval of chrTEST2 should end at 3 assert bioframe.digest(fasta_records, "DpnII").iloc[1].end == 3 def test_frac_mapped(): pytest.importorskip("pysam") chromsizes = bioframe.read_chromsizes( testdir + "/test_data/test.chrom.sizes", filter_chroms=False ) fasta_records = bioframe.load_fasta(testdir + "/test_data/test.fa") unmapped = np.array([1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0]) assert ( unmapped == bioframe.frac_mapped( bioframe.binnify(chromsizes, 1), fasta_records, return_input=False ).values ).all() unmapped = np.array([0.8, 0.8, 0]) assert ( unmapped == bioframe.frac_mapped( bioframe.binnify(chromsizes, 5), fasta_records, return_input=False ).values ).all() unmapped = np.array([0.8, 4 / 7]) assert ( unmapped == bioframe.frac_mapped( bioframe.binnify(chromsizes, 7), fasta_records, return_input=False ).values ).all() def test_frac_gc(): pytest.importorskip("pysam") chromsizes = bioframe.read_chromsizes( testdir + "/test_data/test.chrom.sizes", filter_chroms=False ) fasta_records = bioframe.load_fasta(testdir + "/test_data/test.fa") unmapped_bp = ( 0 == bioframe.frac_mapped( bioframe.binnify(chromsizes, 1), fasta_records, return_input=False ).values ) assert np.isnan( bioframe.frac_gc( bioframe.binnify(chromsizes, 1), fasta_records, return_input=False, mapped_only=True, ).values[unmapped_bp] ).all() ## mapped_only=True should ignore N or return np.nan if interval only contains N np.testing.assert_equal( np.array([0.5, 0.5, np.nan]), bioframe.frac_gc( bioframe.binnify(chromsizes, 5), fasta_records, return_input=False, mapped_only=True, ).values, ) assert ( np.array([0.5, 0.5]) == bioframe.frac_gc( bioframe.binnify(chromsizes, 7), fasta_records, return_input=False, mapped_only=True, ).values ).all() ## mapped_only=False should count N as zero assert ( np.array([0.4, 0.4, 0]) == bioframe.frac_gc( bioframe.binnify(chromsizes, 5), fasta_records, return_input=False, mapped_only=False, ).values ).all() assert ( np.array([0.4, 2 / 7]) == bioframe.frac_gc( bioframe.binnify(chromsizes, 7), fasta_records, return_input=False, mapped_only=False, ).values ).all() def test_seq_gc(): assert 0 == bioframe.seq_gc("AT") assert np.isnan(bioframe.seq_gc("NNN")) assert 1 == bioframe.seq_gc("NGnC") assert 0.5 == bioframe.seq_gc("GTCA") assert 0.25 == bioframe.seq_gc("nnnNgTCa", mapped_only=False) with pytest.raises(ValueError): bioframe.seq_gc(["A", "T"]) with pytest.raises(ValueError): bioframe.seq_gc(np.array("ATGC")) ### todo: test frac_gene_coverage(bintable, mrna): ### currently broken def test_pair_by_distance(): df = pd.DataFrame( [ ["chr1", 1, 3, "+", "cat"], ["chr1", 6, 8, "+", "skunk"], ["chr1", 9, 11, "-", "dog"], ], columns=["chrom", "start", "end", "strand", "animal"], ) # Distance between midpoints assert ( bioframe.pair_by_distance( df, min_sep=1, max_sep=4, min_intervening=None, max_intervening=None, relative_to="midpoints", )[["start_1", "end_1", "start_2", "end_2"]].values == np.array([[6, 8, 9, 11]]) ).all() # Distance between regions endpoints assert ( bioframe.pair_by_distance( df, min_sep=1, max_sep=4, min_intervening=None, max_intervening=None, relative_to="endpoints", )[["start_1", "end_1", "start_2", "end_2"]].values == np.array([[1, 3, 6, 8]]) ).all() # Distance between midpoints is large assert ( bioframe.pair_by_distance( df, min_sep=1, max_sep=6, min_intervening=None, max_intervening=None, relative_to="midpoints", )[["start_1", "end_1", "start_2", "end_2"]].values == np.array([[1, 3, 6, 8], [6, 8, 9, 11]]) ).all() # Distance between midpoints is large assert ( bioframe.pair_by_distance( df, min_sep=1, max_sep=9, min_intervening=None, max_intervening=None, )[["start_1", "end_1", "start_2", "end_2"]].values == np.array([[1, 3, 6, 8], [1, 3, 9, 11], [6, 8, 9, 11]]) ).all() # Do not allow intervening regions assert ( bioframe.pair_by_distance( df, min_sep=1, max_sep=9, min_intervening=None, max_intervening=0, )[["start_1", "end_1", "start_2", "end_2"]].values == np.array([[1, 3, 6, 8], [6, 8, 9, 11]]) ).all() # Strictly one intervening region assert ( bioframe.pair_by_distance( df, min_sep=1, max_sep=9, min_intervening=1, max_intervening=None, )[["start_1", "end_1", "start_2", "end_2"]].values == np.array([[1, 3, 9, 11]]) ).all() # no negative min_sep with pytest.raises(ValueError): bioframe.pair_by_distance(df, min_sep=-1, max_sep=9) # no min_sep > max_sep with pytest.raises(ValueError): bioframe.pair_by_distance(df, min_sep=12, max_sep=9) # no min_intervening > max_intervening with pytest.raises(ValueError): bioframe.pair_by_distance( df, min_sep=0, max_sep=9, min_intervening=10, max_intervening=9 ) def test_mark_merge_runs(): df1 = pd.DataFrame([ # chr1 # consecutive run of "c" ["chr1", 85563, 129897, "c", 0.2], ["chr1", 129897, 508340, "c", 0.8], ["chr1", 508340, 620903, "c", 0.5], # singleton run of "c" separated by 1bp from previous run ["chr1", 620904, 688020, "c", 0.7], # consecutive with previous interval but different value of "name" ["chr1", 688020, 858415, "b", 0.8], # chr2 ["chr2", 548402, 639680, "a", 0.6], ["chr2", 639680, 1026586, "b", 0.8], # chr3 ["chr3", 260538, 272930, "c", 0.5], ["chr3", 272930, 470969, "c", 0.5], ["chr3", 470969, 502336, "c", 0.5], ], columns=["chrom", "start", "end", "name", "score"]) runs = bioframe.mark_runs(df1, "name") assert ( runs["name"].to_numpy() == np.array(["c", "c", "c", "c", "b", "a", "b", "c", "c", "c"]) ).all() assert ( runs["run"].to_numpy() == np.array([0, 0, 0, 1, 2, 0, 1, 0, 0, 0]) ).all() runs = bioframe.mark_runs(df1, "name", reset_counter=False) assert ( runs["run"].to_numpy() == np.array([0, 0, 0, 1, 2, 3, 4, 5, 5, 5]) ).all() runs = bioframe.mark_runs(df1, "name", run_col="foo", reset_counter=False) assert ( runs["foo"].to_numpy() == np.array([0, 0, 0, 1, 2, 3, 4, 5, 5, 5]) ).all() merged = bioframe.merge_runs( df1, "name", agg={"score_mean": ("score", "mean")} ) assert ( merged["name"].to_numpy() == np.array(["c", "c", "b", "a", "b", "c"]) ).all() assert np.allclose( merged["score_mean"].to_numpy(), np.array([0.5, 0.7, 0.8, 0.6, 0.8, 0.5]), ) def test_mark_merge_runs__with_overlaps(): df1 = pd.DataFrame([ # chr1 # consecutive run of "c" ["chr1", 85563, 129897, "c", 0.2], ["chr1", 129897, 508340, "c", 0.8], ["chr1", 508340, 620903, "c", 0.5], # singleton run of "c" separated by 1bp from previous run ["chr1", 620904, 688020, "c", 0.7], # consecutive with previous interval but different value of "name" ["chr1", 688020, 858415, "b", 0.8], # overlapping with previous interval ["chr1", 700000, 900000, "b", 0.8], # chr2 ["chr2", 548402, 639680, "a", 0.6], ["chr2", 639680, 1026586, "b", 0.8], # chr3 ["chr3", 260538, 272930, "c", 0.5], ["chr3", 272930, 470969, "c", 0.5], ["chr3", 470969, 502336, "c", 0.5], ], columns=["chrom", "start", "end", "name", "score"]) with pytest.raises(ValueError): bioframe.mark_runs(df1, "name") runs = bioframe.mark_runs(df1, "name", allow_overlaps=True) assert ( runs["name"].to_numpy() == np.array(["c", "c", "c", "c", "b", "b", "a", "b", "c", "c", "c"]) ).all() assert ( runs["run"].to_numpy() == np.array([0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 0]) ).all() open2c-bioframe-4fe9b25/tests/test_fileops.py000066400000000000000000000050641477525772300213500ustar00rootroot00000000000000import sys from io import StringIO import pandas as pd import pytest import bioframe is_big_endian = sys.byteorder == "big" ############# tests ##################### def test_read_table(): d = """chr1\nchr2\nchr2""" assert bioframe.read_table(StringIO(d), schema="bed3").shape == (3, 3) # raise a value error if any columns are filled with all NA with pytest.raises(ValueError): bioframe.read_table(StringIO(d), schema="bed3", schema_is_strict=True) # fill with nans to appropriate size if schema_is_strict=False (aka the default) d = """chr1 5 10 chr1 10 20 chr2 30 40""" assert bioframe.read_table(StringIO(d), schema="bed3", sep="\\s+").shape == (3, 3) assert bioframe.read_table(StringIO(d), schema="bed6", sep="\\s+").shape == (3, 6) assert bioframe.read_table(StringIO(d), schema="bed12", sep="\\s+").shape == (3, 12) # bedpe has 10 columns d = """chr1 5 10 chr2 5 10 interval1 . + - chr1 10 20 chr1 5 10 interval2 . + - chr2 30 40 chr2 5 10 interval3 12 + - """ assert bioframe.read_table( StringIO(d), schema="bedpe", sep=r"\s+", schema_is_strict=True ).shape == (3, 10) def test_read_chromsizes(): d = """chr1\nchr2\nchr2""" with pytest.raises(ValueError): bioframe.read_chromsizes(StringIO(d)) d = """chr1\t1\nchr3\t2\nchr2\t3\n """ chromsizes = bioframe.read_chromsizes(StringIO(d)) assert isinstance(chromsizes, pd.Series) assert chromsizes.name == "length" assert list(chromsizes.index) == ["chr1", "chr2", "chr3"] assert list(chromsizes.values) == [1, 3, 2] def test_read_beds(): # Checking that we properly read common bed schemas schemas = ['narrowPeak', 'jaspar', 'bed9', 'bed12'] for schema in schemas: _ = bioframe.read_table(f'tests/test_data/{schema}.bed', schema=schema, schema_is_strict=True) @pytest.mark.skipif(is_big_endian, reason="Test skipped on big-endian systems") def test_read_sam(): pytest.importorskip("pysam") # SAM file taken from https://github.com/samtools/samtools/blob/develop/examples/toy.sam _ = bioframe.read_alignments('tests/test_data/toy.sam') @pytest.mark.skipif(is_big_endian, reason="Test skipped on big-endian systems") def test_read_bam(): pytest.importorskip("pysam") # converted toy.sam via `samtools view -bS toy.sam > toy.bam; # index file created with `samtools index toy.bam` _ = bioframe.read_alignments('tests/test_data/toy.bam') open2c-bioframe-4fe9b25/tests/test_ops.py000066400000000000000000002076431477525772300205170ustar00rootroot00000000000000from io import StringIO import numpy as np import pandas as pd import pytest import bioframe import bioframe.core.checks as checks from bioframe.core.construction import make_viewframe # import pyranges as pr # def bioframe_to_pyranges(df): # pydf = df.copy() # pydf.rename( # {"chrom": "Chromosome", "start": "Start", "end": "End"}, # axis="columns", # inplace=True, # ) # return pr.PyRanges(pydf) # def pyranges_to_bioframe(pydf): # df = pydf.df # df.rename( # {"Chromosome": "chrom", "Start": "start", "End": "end", # "Count": "n_intervals"}, # axis="columns", # inplace=True, # ) # return df # def pyranges_overlap_to_bioframe(pydf): # ## convert the df output by pyranges join into a bioframe-compatible format # df = pydf.df.copy() # df.rename( # { # "Chromosome": "chrom_1", # "Start": "start_1", # "End": "end_1", # "Start_b": "start_2", # "End_b": "end_2", # }, # axis="columns", # inplace=True, # ) # df["chrom_1"] = df["chrom_1"].values.astype("object") # to remove categories # df["chrom_2"] = df["chrom_1"].values # return df chroms = ["chr12", "chrX"] def mock_bioframe(num_entries=100): pos = np.random.randint(1, 1e7, size=(num_entries, 2)) df = pd.DataFrame() df["chrom"] = np.random.choice(chroms, num_entries) df["start"] = np.min(pos, axis=1) df["end"] = np.max(pos, axis=1) df.sort_values(["chrom", "start"], inplace=True) return df ############# tests ##################### def test_trim(): ### trim with view_df view_df = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], ["chr1", 13, 26, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom", "start", "end", "name"], ) df = pd.DataFrame( [ ["chr1", -6, 12, "chr1p"], ["chr1", 0, 12, "chr1p"], ["chr1", 32, 36, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom", "start", "end", "view_region"], ) df_trimmed = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], ["chr1", 0, 12, "chr1p"], ["chr1", 26, 26, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=["chrom", "start", "end", "view_region"], ) with pytest.raises(ValueError): bioframe.trim(df, view_df=view_df) # df_view_col already exists, so need to specify it: pd.testing.assert_frame_equal( df_trimmed, bioframe.trim(df, view_df=view_df, df_view_col="view_region") ) # non-default columns in view funky_view = view_df.rename(columns={"chrom": "chr"}) pd.testing.assert_frame_equal( df_trimmed, bioframe.trim( df, view_df=funky_view, df_view_col="view_region", cols_view=["chr", "start", "end"], ), ) ### trim with view_df interpreted from dictionary for chromsizes chromsizes = {"chr1": 20, "chrX_0": 5} df = pd.DataFrame( [ ["chr1", 0, 12], ["chr1", 13, 26], ["chrX_0", 1, 8], ], columns=["chrom", "startFunky", "end"], ) df_trimmed = pd.DataFrame( [ ["chr1", 0, 12], ["chr1", 13, 20], ["chrX_0", 1, 5], ], columns=["chrom", "startFunky", "end"], ) pd.testing.assert_frame_equal( df_trimmed, bioframe.trim( df, view_df=chromsizes, cols=["chrom", "startFunky", "end"], return_view_columns=False, ), ) ### trim with default limits=None and negative values df = pd.DataFrame( [ ["chr1", -4, 12], ["chr1", 13, 26], ["chrX", -5, -1], ], columns=["chrom", "start", "end"], ) df_trimmed = pd.DataFrame( [ ["chr1", 0, 12], ["chr1", 13, 26], ["chrX", 0, 0], ], columns=["chrom", "start", "end"], ) pd.testing.assert_frame_equal(df_trimmed, bioframe.trim(df)) ### trim when there are NaN intervals df = pd.DataFrame( [ ["chr1", -4, 12, "chr1p"], [pd.NA, pd.NA, pd.NA, "chr1q"], ["chrX", -5, -1, "chrX_0"], ], columns=["chrom", "start", "end", "region"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) df_trimmed = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], [pd.NA, pd.NA, pd.NA, "chr1q"], ["chrX", 0, 0, "chrX_0"], ], columns=["chrom", "start", "end", "region"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) pd.testing.assert_frame_equal(df_trimmed, bioframe.trim(df)) ### trim with view_df and NA intervals view_df = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], ["chr1", 13, 26, "chr1q"], ["chrX", 1, 12, "chrX_0"], ], columns=["chrom", "start", "end", "name"], ) df = pd.DataFrame( [ ["chr1", -6, 12], ["chr1", 0, 12], [pd.NA, pd.NA, pd.NA], ["chrX", 1, 20], ], columns=["chrom", "start", "end"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) df_trimmed = pd.DataFrame( [ ["chr1", 0, 12, "chr1p"], ["chr1", 0, 12, "chr1p"], [pd.NA, pd.NA, pd.NA, None], ["chrX", 1, 12, "chrX_0"], ], columns=["chrom", "start", "end", "view_region"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) # infer df_view_col with assign_view and ignore NAs pd.testing.assert_frame_equal( df_trimmed, bioframe.trim(df, view_df=view_df, df_view_col=None, return_view_columns=True)[ ["chrom", "start", "end", "view_region"] ], ) def test_expand(): d = """chrom start end 0 chr1 1 5 1 chr1 50 55 2 chr2 100 200""" fake_bioframe = pd.read_csv(StringIO(d), sep=r"\s+") expand_bp = 10 fake_expanded = bioframe.expand(fake_bioframe, expand_bp) d = """chrom start end 0 chr1 -9 15 1 chr1 40 65 2 chr2 90 210""" df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal(df, fake_expanded) # expand with negative pad expand_bp = -10 fake_expanded = bioframe.expand(fake_bioframe, expand_bp) d = """chrom start end 0 chr1 3 3 1 chr1 52 52 2 chr2 110 190""" df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal(df, fake_expanded) expand_bp = -10 fake_expanded = bioframe.expand(fake_bioframe, expand_bp, side="left") d = """chrom start end 0 chr1 3 5 1 chr1 52 55 2 chr2 110 200""" df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal(df, fake_expanded) # expand with multiplicative pad mult = 0 fake_expanded = bioframe.expand(fake_bioframe, pad=None, scale=mult) d = """chrom start end 0 chr1 3 3 1 chr1 52 52 2 chr2 150 150""" df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal(df, fake_expanded) mult = 2.0 fake_expanded = bioframe.expand(fake_bioframe, pad=None, scale=mult) d = """chrom start end 0 chr1 -1 7 1 chr1 48 58 2 chr2 50 250""" df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal(df, fake_expanded) # expand with NA and non-integer multiplicative pad d = """chrom start end 0 chr1 1 5 1 NA NA NA 2 chr2 100 200""" fake_bioframe = pd.read_csv(StringIO(d), sep=r"\s+").astype( {"start": pd.Int64Dtype(), "end": pd.Int64Dtype()} ) mult = 1.10 fake_expanded = bioframe.expand(fake_bioframe, pad=None, scale=mult) d = """chrom start end 0 chr1 1 5 1 NA NA NA 2 chr2 95 205""" df = pd.read_csv(StringIO(d), sep=r"\s+").astype( {"start": pd.Int64Dtype(), "end": pd.Int64Dtype()} ) pd.testing.assert_frame_equal(df, fake_expanded) def test_expand_amount_args(): d = """chrom start end 0 chr1 3 5 1 chr1 52 55 2 chr2 110 200""" df = pd.read_csv(StringIO(d), sep=r"\s+") with pytest.raises(ValueError): bioframe.expand(df, pad=10, scale=2.0) def test_overlap(): ### test consistency of overlap(how='inner') with pyranges.join ### ### note does not test overlap_start or overlap_end columns of bioframe.overlap df1 = mock_bioframe() df2 = mock_bioframe() assert not df1.equals(df2) # p1 = bioframe_to_pyranges(df1) # p2 = bioframe_to_pyranges(df2) # pp = pyranges_overlap_to_bioframe(p1.join(p2, how=None))[ # ["chrom_1", "start_1", "end_1", "chrom_2", "start_2", "end_2"] # ] # bb = bioframe.overlap(df1, df2, how="inner")[ # ["chrom_1", "start_1", "end_1", "chrom_2", "start_2", "end_2"] # ] # pp = pp.sort_values( # ["chrom_1", "start_1", "end_1", "chrom_2", "start_2", "end_2"], # ignore_index=True, # ) # bb = bb.sort_values( # ["chrom_1", "start_1", "end_1", "chrom_2", "start_2", "end_2"], # ignore_index=True, # ) # pd.testing.assert_frame_equal(bb, pp, check_dtype=False, check_exact=False) # print("overlap elements agree") ### test overlap on= [] ### df1 = pd.DataFrame( [ ["chr1", 8, 12, "+", "cat"], ["chr1", 8, 12, "-", "cat"], ["chrX", 1, 8, "+", "cat"], ], columns=["chrom1", "start", "end", "strand", "animal"], ) df2 = pd.DataFrame( [["chr1", 6, 10, "+", "dog"], ["chrX", 7, 10, "-", "dog"]], columns=["chrom2", "start2", "end2", "strand", "animal"], ) b = bioframe.overlap( df1, df2, on=["animal"], how="left", cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), return_index=True, return_input=False, ) assert np.sum(pd.isna(b["index_"].values)) == 3 b = bioframe.overlap( df1, df2, on=["strand"], how="left", cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), return_index=True, return_input=False, ) assert np.sum(pd.isna(b["index_"].values)) == 2 b = bioframe.overlap( df1, df2, on=None, how="left", cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), return_index=True, return_input=False, ) assert np.sum(pd.isna(b["index_"].values)) == 0 ### test overlap 'left', 'outer', and 'right' b = bioframe.overlap( df1, df2, on=None, how="outer", cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), ) assert len(b) == 3 b = bioframe.overlap( df1, df2, on=["animal"], how="outer", cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), ) assert len(b) == 5 b = bioframe.overlap( df1, df2, on=["animal"], how="inner", cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), ) assert len(b) == 0 b = bioframe.overlap( df1, df2, on=["animal"], how="right", cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), ) assert len(b) == 2 b = bioframe.overlap( df1, df2, on=["animal"], how="left", cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), ) assert len(b) == 3 ### test overlap with point and segment data df_point1 = pd.DataFrame( [["chr1", 1, 1]], columns=["chrom", "start", "end"] ).astype({"chrom": "object", "start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) df_segment12 = pd.DataFrame( [["chr1", 1, 2]], columns=["chrom", "start", "end"] ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) b = bioframe.overlap( df_point1, df_segment12, on=None, how="left", return_index=False, return_input=True, ) df_expected = pd.DataFrame( [["chr1", 1, 1, "chr1", 1, 2]], columns=["chrom", "start", "end", "chrom_", "start_", "end_"], ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df_expected, b) ### test for changed order of input point and segment b = bioframe.overlap( df_segment12, df_point1, on=None, how="left", return_index=False, return_input=True, ) df_expected = pd.DataFrame( [["chr1", 1, 2, "chr1", 1, 1]], columns=["chrom", "start", "end", "chrom_", "start_", "end_"], ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df_expected, b) ### test for overlap with point and segment with right method b = bioframe.overlap( df_point1, df_segment12, on=None, how="right", return_index=False, return_input=True, ) df_expected = pd.DataFrame( [["chr1", 1, 1, "chr1", 1, 2]], columns=["chrom", "start", "end", "chrom_", "start_", "end_"], ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df_expected, b) ### test for swapped order of input point and segment b = bioframe.overlap( df_segment12, df_point1, on=None, how="right", return_index=False, return_input=True, ) df_expected = pd.DataFrame( [["chr1", 1, 2, "chr1", 1, 1]], columns=["chrom", "start", "end", "chrom_", "start_", "end_"], ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df_expected, b) ### Two adjacent point should not overlap with each other df_point1 = pd.DataFrame( [["chr1", 1, 1]], columns=["chrom", "start", "end"] ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) df_point2 = pd.DataFrame( [["chr1", 2, 2]], columns=["chrom", "start", "end"] ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) b = bioframe.overlap( df_point1, df_point2, on=None, how="left", return_index=False, return_input=True, ) df_expected = pd.DataFrame( [["chr1", 1, 1, None, pd.NA, pd.NA]], columns=["chrom", "start", "end", "chrom_", "start_", "end_"], ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df_expected, b) ### test for changed order of input point b = bioframe.overlap( df_point2, df_point1, on=None, how="left", return_index=False, return_input=True, ) df_expected = pd.DataFrame( [["chr1", 2, 2, None, pd.NA, pd.NA]], columns=["chrom", "start", "end", "chrom_", "start_", "end_"], ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df_expected, b) ### Point adjacent to the end of the segment should not ### overlap with the segment df_segment12 = pd.DataFrame( [["chr1", 1, 2]], columns=["chrom", "start", "end"] ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) df_point2 = pd.DataFrame( [["chr1", 2, 2]], columns=["chrom", "start", "end"] ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) b = bioframe.overlap( df_segment12, df_point2, on=None, how="left", return_index=False, return_input=True, ) df_expected = pd.DataFrame( [["chr1", 1, 2, None, pd.NA, pd.NA]], columns=["chrom", "start", "end", "chrom_", "start_", "end_"], ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df_expected, b) b = bioframe.overlap( df_point2, df_segment12, on=None, how="left", return_index=False, return_input=True, ) df_expected = pd.DataFrame( [["chr1", 2, 2, None, pd.NA, pd.NA]], columns=["chrom", "start", "end", "chrom_", "start_", "end_"], ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df_expected, b) ### Point adjacent to the start of the segment should ### overlap with the segment df_point1 = pd.DataFrame( [["chr1", 1, 1]], columns=["chrom", "start", "end"] ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) df_segment12 = pd.DataFrame( [["chr1", 1, 2]], columns=["chrom", "start", "end"] ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) b = bioframe.overlap( df_point1, df_segment12, on=None, how="left", return_index=False, return_input=True, ) df_expected = pd.DataFrame( [["chr1", 1, 1, "chr1", 1, 2]], columns=["chrom", "start", "end", "chrom_", "start_", "end_"], ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df_expected, b) b = bioframe.overlap( df_segment12, df_point1, on=None, how="left", return_index=False, return_input=True, ) df_expected = pd.DataFrame( [["chr1", 1, 2, "chr1", 1, 1]], columns=["chrom", "start", "end", "chrom_", "start_", "end_"], ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df_expected, b) ### test keep_order and NA handling df1 = pd.DataFrame( [ ["chr1", 8, 12, "+"], [pd.NA, pd.NA, pd.NA, "-"], ["chrX", 1, 8, "+"], ], columns=["chrom", "start", "end", "strand"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) df2 = pd.DataFrame( [["chr1", 6, 10, "+"], [pd.NA, pd.NA, pd.NA, "-"], ["chrX", 7, 10, "-"]], columns=["chrom2", "start2", "end2", "strand"], ).astype({"start2": pd.Int64Dtype(), "end2": pd.Int64Dtype()}) assert df1.equals( bioframe.overlap( df1, df2, how="left", keep_order=True, cols2=["chrom2", "start2", "end2"] )[["chrom", "start", "end", "strand"]] ) # keep_order=False is non-deterministic # assert not df1.equals( # bioframe.overlap( # df1, df2, how="left", keep_order=False, cols2=["chrom2", "start2", "end2"] # )[["chrom", "start", "end", "strand"]]) df1 = pd.DataFrame( [ ["chr1", 8, 12, "+", pd.NA], [pd.NA, pd.NA, pd.NA, "-", pd.NA], ["chrX", 1, 8, pd.NA, pd.NA], ], columns=["chrom", "start", "end", "strand", "animal"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) df2 = pd.DataFrame( [["chr1", 6, 10, pd.NA, "tiger"]], columns=["chrom2", "start2", "end2", "strand", "animal"], ).astype({"start2": pd.Int64Dtype(), "end2": pd.Int64Dtype()}) assert bioframe.overlap( df1, df2, how="outer", cols2=["chrom2", "start2", "end2"], return_index=True, keep_order=False, ).shape == (3, 12) ### result of overlap should still have bedframe-like properties overlap_df = bioframe.overlap( df1, df2, how="outer", cols2=["chrom2", "start2", "end2"], return_index=True, suffixes=("", ""), ) assert checks.is_bedframe( overlap_df[df1.columns], ) assert checks.is_bedframe( overlap_df[df2.columns], cols=["chrom2", "start2", "end2"] ) overlap_df = bioframe.overlap( df1, df2, how="innter", cols2=["chrom2", "start2", "end2"], return_index=True, suffixes=("", ""), ) assert checks.is_bedframe( overlap_df[df1.columns], ) assert checks.is_bedframe( overlap_df[df2.columns], cols=["chrom2", "start2", "end2"] ) # test keep_order incompatible if how!= 'left' with pytest.raises(ValueError): bioframe.overlap( df1, df2, how="outer", on=["animal"], cols2=["chrom2", "start2", "end2"], keep_order=True, ) def test_overlap_preserves_coord_dtypes(): df1 = pd.DataFrame( [ ["chr1", 8, 12, "+"], ["chr1", 7, 10, "-"], ["chrX", 1, 8, "+"], ], columns=["chrom", "start", "end", "strand"], ).astype({"start": np.uint32, "end": np.uint32}) df2 = pd.DataFrame( [ ["chr1", 6, 10, "+"], [pd.NA, pd.NA, pd.NA, "-"], ["chrX", 7, 10, "-"], ["chrX", 1000, 1200, "-"], ], columns=["chrom", "start", "end", "strand"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) # inner join - left keeps non-nullable numpy uint32 overlap_dtypes = bioframe.overlap(df1, df2, ensure_int=False, how="inner").dtypes for col in ["start", "end"]: assert overlap_dtypes[col] == np.uint32 for col in ["start_", "end_"]: assert overlap_dtypes[col] == pd.Int64Dtype() # outer join - left uint32 gets cast to numpy float64 because of NaNs on left overlap_dtypes = bioframe.overlap(df1, df2, how="outer", ensure_int=False).dtypes assert overlap_dtypes["start"] == np.float64 assert overlap_dtypes["end"] == np.float64 assert overlap_dtypes["start_"] == pd.Int64Dtype() assert overlap_dtypes["end_"] == pd.Int64Dtype() # convert left coords to nullable *before* joining overlap_dtypes = bioframe.overlap( df1.convert_dtypes(), df2, ensure_int=False, how="inner" ).dtypes assert overlap_dtypes["start"] == pd.UInt32Dtype() assert overlap_dtypes["end"] == pd.UInt32Dtype() assert overlap_dtypes["start_"] == pd.Int64Dtype() assert overlap_dtypes["end_"] == pd.Int64Dtype() # convert coords to nullable *after* joining # inner join - uint32 output becomes UInt32 # outer join - float64 output becomes Int64 overlap_dtypes = ( bioframe.overlap(df1, df2, ensure_int=False, how="inner") .convert_dtypes() .dtypes ) assert overlap_dtypes["start"] == pd.UInt32Dtype() assert overlap_dtypes["end"] == pd.UInt32Dtype() assert overlap_dtypes["start_"] == pd.Int64Dtype() assert overlap_dtypes["end_"] == pd.Int64Dtype() overlap_dtypes = ( bioframe.overlap(df1, df2, ensure_int=False, how="outer") .convert_dtypes() .dtypes ) assert overlap_dtypes["start"] == pd.Int64Dtype() assert overlap_dtypes["end"] == pd.Int64Dtype() assert overlap_dtypes["start_"] == pd.Int64Dtype() assert overlap_dtypes["end_"] == pd.Int64Dtype() def test_overlap_ensure_int(): df1 = pd.DataFrame( [ ["chr1", 8, 12, "+"], ["chr1", 7, 10, "-"], ["chrX", 1, 8, "+"], ], columns=["chrom", "start", "end", "strand"], ).astype({"start": np.uint32, "end": np.uint32}) df2 = pd.DataFrame( [["chr1", 6, 10, "+"], [pd.NA, pd.NA, pd.NA, "-"], ["chrX", 7, 10, "-"]], columns=["chrom", "start", "end", "strand"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) # inner join overlap_dtypes = bioframe.overlap(df1, df2, how="inner", ensure_int=True).dtypes for col in ["start", "end"]: assert overlap_dtypes[col] == np.uint32 for col in ["start_", "end_"]: assert overlap_dtypes[col] == pd.Int64Dtype() # outer join - left uint32 gets cast to UInt32 before the join overlap_dtypes = bioframe.overlap(df1, df2, how="outer", ensure_int=True).dtypes for col in ["start", "end"]: assert overlap_dtypes[col] == pd.UInt32Dtype() for col in ["start_", "end_"]: assert overlap_dtypes[col] == pd.Int64Dtype() def test_cluster(): df1 = pd.DataFrame( [ ["chr1", 1, 5], ["chr1", 3, 8], ["chr1", 8, 10], ["chr1", 12, 14], ], columns=["chrom", "start", "end"], ) df_annotated = bioframe.cluster(df1) assert ( df_annotated["cluster"].values == np.array([0, 0, 0, 1]) ).all() # the last interval does not overlap the first three df_annotated = bioframe.cluster(df1, min_dist=2) assert ( df_annotated["cluster"].values == np.array([0, 0, 0, 0]) ).all() # all intervals part of the same cluster df_annotated = bioframe.cluster(df1, min_dist=None) assert ( df_annotated["cluster"].values == np.array([0, 0, 1, 2]) ).all() # adjacent intervals not clustered df1.iloc[0, 0] = "chrX" df_annotated = bioframe.cluster(df1) assert ( df_annotated["cluster"].values == np.array([2, 0, 0, 1]) ).all() # do not cluster intervals across chromosomes # test consistency with pyranges (which automatically sorts df upon # creation and uses 1-based indexing for clusters) # assert ( # (bioframe_to_pyranges(df1).cluster(count=True).df["Cluster"].values - 1) # == bioframe.cluster(df1.sort_values(["chrom", "start"]))["cluster"].values # ).all() # test on=[] argument df1 = pd.DataFrame( [ ["chr1", 3, 8, "+", "cat", 5.5], ["chr1", 3, 8, "-", "dog", 6.5], ["chr1", 6, 10, "-", "cat", 6.5], ["chrX", 6, 10, "-", "cat", 6.5], ], columns=["chrom", "start", "end", "strand", "animal", "location"], ) assert ( bioframe.cluster(df1, on=["animal"])["cluster"].values == np.array([0, 1, 0, 2]) ).all() assert ( bioframe.cluster(df1, on=["strand"])["cluster"].values == np.array([0, 1, 1, 2]) ).all() assert ( bioframe.cluster(df1, on=["location", "animal"])["cluster"].values == np.array([0, 2, 1, 3]) ).all() ### test cluster with NAs df1 = pd.DataFrame( [ ["chrX", 1, 8, pd.NA, pd.NA], [pd.NA, pd.NA, pd.NA, "-", pd.NA], ["chr1", 8, 12, "+", pd.NA], ["chr1", 1, 8, np.nan, pd.NA], [pd.NA, np.nan, pd.NA, "-", pd.NA], ], columns=["chrom", "start", "end", "strand", "animal"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) assert bioframe.cluster(df1)["cluster"].max() == 3 assert bioframe.cluster(df1, on=["strand"])["cluster"].max() == 4 pd.testing.assert_frame_equal(df1, bioframe.cluster(df1)[df1.columns]) assert checks.is_bedframe( bioframe.cluster(df1, on=["strand"]), cols=["chrom", "cluster_start", "cluster_end"], ) assert checks.is_bedframe( bioframe.cluster(df1), cols=["chrom", "cluster_start", "cluster_end"] ) assert checks.is_bedframe(bioframe.cluster(df1)) def test_merge(): df1 = pd.DataFrame( [ ["chr1", 1, 5], ["chr1", 3, 8], ["chr1", 8, 10], ["chr1", 12, 14], ], columns=["chrom", "start", "end"], ) # the last interval does not overlap the first three with default min_dist=0 assert (bioframe.merge(df1)["n_intervals"].values == np.array([3, 1])).all() # adjacent intervals are not clustered with min_dist=none assert ( bioframe.merge(df1, min_dist=None)["n_intervals"].values == np.array([2, 1, 1]) ).all() # all intervals part of one cluster assert ( bioframe.merge(df1, min_dist=2)["n_intervals"].values == np.array([4]) ).all() df1.iloc[0, 0] = "chrX" assert ( bioframe.merge(df1, min_dist=None)["n_intervals"].values == np.array([1, 1, 1, 1]) ).all() assert ( bioframe.merge(df1, min_dist=0)["n_intervals"].values == np.array([2, 1, 1]) ).all() # total number of intervals should equal length of original dataframe mock_df = mock_bioframe() assert np.sum(bioframe.merge(mock_df, min_dist=0)["n_intervals"].values) == len( mock_df ) # # test consistency with pyranges # pd.testing.assert_frame_equal( # pyranges_to_bioframe(bioframe_to_pyranges(df1).merge(count=True)), # bioframe.merge(df1), # check_dtype=False, # check_exact=False, # ) # test on=['chrom',...] argument df1 = pd.DataFrame( [ ["chr1", 3, 8, "+", "cat", 5.5], ["chr1", 3, 8, "-", "dog", 6.5], ["chr1", 6, 10, "-", "cat", 6.5], ["chrX", 6, 10, "-", "cat", 6.5], ], columns=["chrom", "start", "end", "strand", "animal", "location"], ) assert len(bioframe.merge(df1, on=None)) == 2 assert len(bioframe.merge(df1, on=["strand"])) == 3 assert len(bioframe.merge(df1, on=["strand", "location"])) == 3 assert len(bioframe.merge(df1, on=["strand", "location", "animal"])) == 4 d = """ chrom start end animal n_intervals 0 chr1 3 10 cat 2 1 chr1 3 8 dog 1 2 chrX 6 10 cat 1""" df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal( df, bioframe.merge(df1, on=["animal"]), check_dtype=False, ) # merge with repeated indices df = pd.DataFrame( {"chrom": ["chr1", "chr2"], "start": [100, 400], "end": [110, 410]} ) df.index = [0, 0] pd.testing.assert_frame_equal( df.reset_index(drop=True), bioframe.merge(df)[["chrom", "start", "end"]] ) # test merge with NAs df1 = pd.DataFrame( [ ["chrX", 1, 8, pd.NA, pd.NA], [pd.NA, pd.NA, pd.NA, "-", pd.NA], ["chr1", 8, 12, "+", pd.NA], ["chr1", 1, 8, np.nan, pd.NA], [pd.NA, np.nan, pd.NA, "-", pd.NA], ], columns=["chrom", "start", "end", "strand", "animal"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) assert bioframe.merge(df1).shape[0] == 4 assert bioframe.merge(df1)["start"].iloc[0] == 1 assert bioframe.merge(df1)["end"].iloc[0] == 12 assert bioframe.merge(df1, on=["strand"]).shape[0] == df1.shape[0] assert bioframe.merge(df1, on=["animal"]).shape[0] == df1.shape[0] assert bioframe.merge(df1, on=["animal"]).shape[1] == df1.shape[1] + 1 assert checks.is_bedframe(bioframe.merge(df1, on=["strand", "animal"])) def test_complement(): ### complementing a df with no intervals in chrX by a view with chrX # should return entire chrX region df1 = pd.DataFrame( [["chr1", 1, 5], ["chr1", 3, 8], ["chr1", 8, 10], ["chr1", 12, 14]], columns=["chrom", "start", "end"], ) df1_chromsizes = {"chr1": 100, "chrX": 100} df1_complement = pd.DataFrame( [ ["chr1", 0, 1, "chr1"], ["chr1", 10, 12, "chr1"], ["chr1", 14, 100, "chr1"], ["chrX", 0, 100, "chrX"], ], columns=["chrom", "start", "end", "view_region"], ) pd.testing.assert_frame_equal( bioframe.complement(df1, view_df=df1_chromsizes), df1_complement ) # non-default columns in view funky_view = make_viewframe(df1_chromsizes, cols=["chr", "start", "end"]) pd.testing.assert_frame_equal( bioframe.complement( df1, view_df=funky_view, cols_view=["chr", "start", "end"], ), df1_complement, ) ### test complement with two chromosomes ### df1.iloc[0, 0] = "chrX" df1_complement = pd.DataFrame( [ ["chr1", 0, 3, "chr1"], ["chr1", 10, 12, "chr1"], ["chr1", 14, 100, "chr1"], ["chrX", 0, 1, "chrX"], ["chrX", 5, 100, "chrX"], ], columns=["chrom", "start", "end", "view_region"], ) pd.testing.assert_frame_equal( bioframe.complement(df1, view_df=df1_chromsizes), df1_complement ) ### test complement with no view_df and a negative interval df1 = pd.DataFrame( [["chr1", -5, 5], ["chr1", 10, 20]], columns=["chrom", "start", "end"] ) df1_complement = pd.DataFrame( [ ["chr1", 5, 10, "chr1"], ["chr1", 20, np.iinfo(np.int64).max, "chr1"], ], columns=["chrom", "start", "end", "view_region"], ) pd.testing.assert_frame_equal(bioframe.complement(df1), df1_complement) ### test complement with an overhanging interval df1 = pd.DataFrame( [["chr1", -5, 5], ["chr1", 10, 20]], columns=["chrom", "start", "end"] ) chromsizes = bioframe.make_viewframe( {"chr1": 15}, name_style="ucsc", view_name_col="VR" ) df1_complement = pd.DataFrame( [ ["chr1", 5, 10, "chr1:0-15"], ], columns=["chrom", "start", "end", "view_region"], ) pd.testing.assert_frame_equal( bioframe.complement(df1, view_df=chromsizes, view_name_col="VR"), df1_complement ) ### test complement where an interval from df overlaps two different ### regions from view ### test complement with no view_df and a negative interval df1 = pd.DataFrame([["chr1", 5, 15]], columns=["chrom", "start", "end"]) chromsizes = [("chr1", 0, 9, "chr1p"), ("chr1", 11, 20, "chr1q")] df1_complement = pd.DataFrame( [["chr1", 0, 5, "chr1p"], ["chr1", 15, 20, "chr1q"]], columns=["chrom", "start", "end", "view_region"], ) pd.testing.assert_frame_equal(bioframe.complement(df1, chromsizes), df1_complement) ### test complement with NAs df1 = pd.DataFrame( [[pd.NA, pd.NA, pd.NA], ["chr1", 5, 15], [pd.NA, pd.NA, pd.NA]], columns=["chrom", "start", "end"], ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(bioframe.complement(df1, chromsizes), df1_complement) with pytest.raises(ValueError): # no NAs allowed in chromsizes bioframe.complement( df1, [("chr1", pd.NA, 9, "chr1p"), ("chr1", 11, 20, "chr1q")] ) assert checks.is_bedframe(bioframe.complement(df1, chromsizes)) def test_closest(): df1 = pd.DataFrame( [ ["chr1", 1, 5], ], columns=["chrom", "start", "end"], ) df2 = pd.DataFrame( [["chr1", 4, 8], ["chr1", 10, 11]], columns=["chrom", "start", "end"] ) ### closest(df1,df2,k=1) ### d = """chrom start end chrom_ start_ end_ distance 0 chr1 1 5 chr1 4 8 0""" df = pd.read_csv(StringIO(d), sep=r"\s+").astype( { "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), "distance": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df, bioframe.closest(df1, df2, k=1)) ### closest(df1,df2, ignore_overlaps=True)) ### d = """chrom_1 start_1 end_1 chrom_2 start_2 end_2 distance 0 chr1 1 5 chr1 10 11 5""" df = pd.read_csv(StringIO(d), sep=r"\s+").astype( { "start_2": pd.Int64Dtype(), "end_2": pd.Int64Dtype(), "distance": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal( df, bioframe.closest(df1, df2, suffixes=("_1", "_2"), ignore_overlaps=True) ) ### closest(df1,df2,k=2) ### d = """chrom_1 start_1 end_1 chrom_2 start_2 end_2 distance 0 chr1 1 5 chr1 4 8 0 1 chr1 1 5 chr1 10 11 5""" df = pd.read_csv(StringIO(d), sep=r"\s+").astype( { "start_2": pd.Int64Dtype(), "end_2": pd.Int64Dtype(), "distance": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal( df, bioframe.closest(df1, df2, suffixes=("_1", "_2"), k=2) ) ### change first interval to new chrom ### df2.iloc[0, 0] = "chrA" d = """chrom start end chrom_ start_ end_ distance 0 chr1 1 5 chr1 10 11 5""" df = pd.read_csv(StringIO(d), sep=r"\s+").astype( { "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), "distance": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal(df, bioframe.closest(df1, df2, k=1)) ### test other return arguments ### df2.iloc[0, 0] = "chr1" d = """ index index_ have_overlap overlap_start overlap_end distance 0 0 0 True 4 5 0 1 0 1 False 5 """ df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal( df, bioframe.closest( df1, df2, k=2, return_overlap=True, return_index=True, return_input=False, return_distance=True, ), check_dtype=False, ) # closest should ignore empty groups (e.g. from categorical chrom) df = pd.DataFrame( [ ["chrX", 1, 8], ["chrX", 2, 10], ], columns=["chrom", "start", "end"], ) d = """ chrom_1 start_1 end_1 chrom_2 start_2 end_2 distance 0 chrX 1 8 chrX 2 10 0 1 chrX 2 10 chrX 1 8 0""" df_closest = pd.read_csv(StringIO(d), sep=r"\s+") df_cat = pd.CategoricalDtype(categories=["chrX", "chr1"], ordered=True) df = df.astype({"chrom": df_cat}) pd.testing.assert_frame_equal( df_closest, bioframe.closest(df, suffixes=("_1", "_2")), check_dtype=False, check_categorical=False, ) # closest should ignore null rows: code will need to be modified # as for overlap if an on=[] option is added df1 = pd.DataFrame( [ [pd.NA, pd.NA, pd.NA], ["chr1", 1, 5], ], columns=["chrom", "start", "end"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) df2 = pd.DataFrame( [ [pd.NA, pd.NA, pd.NA], ["chr1", 4, 8], [pd.NA, pd.NA, pd.NA], ["chr1", 10, 11], ], columns=["chrom", "start", "end"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) d = """chrom_1 start_1 end_1 chrom_2 start_2 end_2 distance 0 chr1 1 5 chr1 10 11 5""" df = pd.read_csv(StringIO(d), sep=r"\s+").astype( { "start_1": pd.Int64Dtype(), "end_1": pd.Int64Dtype(), "start_2": pd.Int64Dtype(), "end_2": pd.Int64Dtype(), "distance": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal( df, bioframe.closest(df1, df2, suffixes=("_1", "_2"), ignore_overlaps=True, k=5) ) with pytest.raises(ValueError): # inputs must be valid bedFrames df1.iloc[0, 0] = "chr10" bioframe.closest(df1, df2) ### closest with direction ### df1 = pd.DataFrame( [ ["chr1", 3, 5, "+"], ["chr1", 3, 5, "-"], ], columns=["chrom", "start", "end", "strand"], ) df2 = pd.DataFrame( [["chr1", 1, 2], ["chr1", 2, 8], ["chr1", 10, 11]], columns=["chrom", "start", "end"], ) ### closest(df1, df2, k=1, direction_col="strand") ### d = """chrom start end strand chrom_ start_ end_ distance 0 chr1 3 5 + chr1 2 8 0 1 chr1 3 5 - chr1 2 8 0 """ df = pd.read_csv(StringIO(d), sep=r"\s+").astype( { "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), "distance": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal( df, bioframe.closest(df1, df2, k=1, direction_col="strand") ) ### closest(df1, df2, k=1, ignore_upstream=False, ignore_downstream=True, ### ignore_overlaps=True, direction_col="strand") ### d = """chrom start end strand chrom_ start_ end_ distance 0 chr1 3 5 + chr1 1 2 1 1 chr1 3 5 - chr1 10 11 5 """ df = pd.read_csv(StringIO(d), sep=r"\s+").astype( { "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), "distance": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal( df, bioframe.closest( df1, df2, k=1, ignore_upstream=False, ignore_downstream=True, ignore_overlaps=True, direction_col="strand", ), ) ### closest(df1, df2, k=1, ignore_upstream=True, ignore_downstream=False, ### ignore_overlaps=True, direction_col="strand") ### d = """chrom start end strand chrom_ start_ end_ distance 0 chr1 3 5 + chr1 10 11 5 1 chr1 3 5 - chr1 1 2 1 """ df = pd.read_csv(StringIO(d), sep=r"\s+").astype( { "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), "distance": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal( df, bioframe.closest( df1, df2, k=1, ignore_upstream=True, ignore_downstream=False, ignore_overlaps=True, direction_col="strand", ), ) ### closest(df1, df2, k=1, ignore_upstream=False, ignore_downstream=True, ### ignore_overlaps=True) when upstream region is present ### df1 = pd.DataFrame( [ ["chr1", 3, 5], ], columns=["chrom", "start", "end"], ) df2 = pd.DataFrame( [["chr1", 1, 2], ["chr1", 10, 11]], columns=["chrom", "start", "end"] ) d = """chrom start end chrom_ start_ end_ distance 0 chr1 3 5 chr1 1 2 1 """ df = pd.read_csv(StringIO(d), sep=r"\s+").astype( { "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), "distance": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal( df, bioframe.closest( df1, df2, k=1, ignore_upstream=False, ignore_downstream=True, ignore_overlaps=True, ), ) ### closest(df1, df2, k=1, ignore_upstream=False, ignore_downstream=True, ### ignore_overlaps=True) when upstream region is absent ### df2 = pd.DataFrame( [["chr1", 5, 6], ["chr1", 10, 11]], columns=["chrom", "start", "end"] ) df = pd.DataFrame( [["chr1", 3, 5, pd.NA, pd.NA, pd.NA, pd.NA]], columns=["chrom", "start", "end", "chrom_", "start_", "end_", "distance"], ).astype( { "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), "distance": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal( df, bioframe.closest( df1, df2, k=1, ignore_upstream=False, ignore_downstream=True, ignore_overlaps=True, ), ) ### closest(df1, df2, k=1, ignore_upstream=True, ignore_downstream=False, ### ignore_overlaps=True) when upstream region is absent ### df2 = pd.DataFrame( [ ["chr1", 1, 2], ], columns=["chrom", "start", "end"], ) df = pd.DataFrame( [["chr1", 3, 5, pd.NA, pd.NA, pd.NA, pd.NA]], columns=["chrom", "start", "end", "chrom_", "start_", "end_", "distance"], ).astype( { "start_": pd.Int64Dtype(), "end_": pd.Int64Dtype(), "distance": pd.Int64Dtype(), } ) pd.testing.assert_frame_equal( df, bioframe.closest( df1, df2, k=1, ignore_upstream=True, ignore_downstream=False, ignore_overlaps=True, ), ) def test_coverage(): #### coverage does not exceed length of original interval df1 = pd.DataFrame([["chr1", 3, 8]], columns=["chrom", "start", "end"]) df2 = pd.DataFrame([["chr1", 2, 10]], columns=["chrom", "start", "end"]) d = """chrom start end coverage 0 chr1 3 8 5""" df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal(df, bioframe.coverage(df1, df2)) ### coverage of interval on different chrom returns zero for coverage and n_overlaps df1 = pd.DataFrame([["chr1", 3, 8]], columns=["chrom", "start", "end"]) df2 = pd.DataFrame([["chrX", 3, 8]], columns=["chrom", "start", "end"]) d = """chrom start end coverage 0 chr1 3 8 0 """ df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal(df, bioframe.coverage(df1, df2)) ### when a second overlap starts within the first df1 = pd.DataFrame([["chr1", 3, 8]], columns=["chrom", "start", "end"]) df2 = pd.DataFrame( [["chr1", 3, 6], ["chr1", 5, 8]], columns=["chrom", "start", "end"] ) d = """chrom start end coverage 0 chr1 3 8 5""" df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal(df, bioframe.coverage(df1, df2)) ### with custom column names cols1 = ["chromosome", "begin", "stop"] cols2 = ["chr", "cluster_start", "cluster_end"] df1 = pd.DataFrame([["chr1", 3, 8]], columns=cols1) df2 = pd.DataFrame([["chr1", 3, 8]], columns=cols2) d = """chromosome begin stop coverage 0 chr1 3 8 5""" df = pd.read_csv(StringIO(d), sep=r"\s+") pd.testing.assert_frame_equal( df, bioframe.coverage(df1, df2, cols1=cols1, cols2=cols2) ) ### coverage of NA interval returns zero for coverage df1 = pd.DataFrame( [ ["chr1", 10, 20], [pd.NA, pd.NA, pd.NA], ["chr1", 3, 8], [pd.NA, pd.NA, pd.NA], ], columns=["chrom", "start", "end"], ) df2 = pd.DataFrame( [["chr1", 3, 6], ["chr1", 5, 8], [pd.NA, pd.NA, pd.NA]], columns=["chrom", "start", "end"], ) df1 = bioframe.sanitize_bedframe(df1) df2 = bioframe.sanitize_bedframe(df2) df_coverage = pd.DataFrame( [ ["chr1", 10, 20, 0], [pd.NA, pd.NA, pd.NA, 0], ["chr1", 3, 8, 5], [pd.NA, pd.NA, pd.NA, 0], ], columns=["chrom", "start", "end", "coverage"], ).astype( {"start": pd.Int64Dtype(), "end": pd.Int64Dtype(), "coverage": pd.Int64Dtype()} ) pd.testing.assert_frame_equal(df_coverage, bioframe.coverage(df1, df2)) ### coverage without return_input returns a single column dataFrame assert ( bioframe.coverage(df1, df2, return_input=False)["coverage"].values == np.array([0, 0, 5, 0]) ).all() def test_subtract(): ### no intervals should be left after self-subtraction df1 = pd.DataFrame( [["chrX", 3, 8], ["chr1", 4, 7], ["chrX", 1, 5]], columns=["chrom", "start", "end"], ) assert len(bioframe.subtract(df1, df1)) == 0 ### no intervals on chrX should remain after subtracting a longer interval ### interval on chr1 should be split. ### additional column should be propagated to children. df2 = pd.DataFrame( [ ["chrX", 0, 18], ["chr1", 5, 6], ], columns=["chrom", "start", "end"], ) df1["animal"] = "sea-creature" df_result = pd.DataFrame( [["chr1", 4, 5, "sea-creature"], ["chr1", 6, 7, "sea-creature"]], columns=["chrom", "start", "end", "animal"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) pd.testing.assert_frame_equal( df_result, bioframe.subtract(df1, df2) .sort_values(["chrom", "start", "end"]) .reset_index(drop=True), ) ### no intervals on chrX should remain after subtracting a longer interval df2 = pd.DataFrame( [["chrX", 0, 4], ["chr1", 6, 6], ["chrX", 4, 9]], columns=["chrom", "start", "end"], ) df1["animal"] = "sea-creature" df_result = pd.DataFrame( [["chr1", 4, 6, "sea-creature"], ["chr1", 6, 7, "sea-creature"]], columns=["chrom", "start", "end", "animal"], ) pd.testing.assert_frame_equal( df_result.astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}), bioframe.subtract(df1, df2) .sort_values(["chrom", "start", "end"]) .reset_index(drop=True), ) ### subtracting dataframes funny column names funny_cols = ["C", "chromStart", "chromStop"] df1 = pd.DataFrame( [["chrX", 3, 8], ["chr1", 4, 7], ["chrX", 1, 5]], columns=funny_cols, ) df1["strand"] = "+" assert len(bioframe.subtract(df1, df1, cols1=funny_cols, cols2=funny_cols)) == 0 funny_cols2 = ["chr", "st", "e"] df2 = pd.DataFrame( [ ["chrX", 0, 18], ["chr1", 5, 6], ], columns=funny_cols2, ) df_result = pd.DataFrame( [["chr1", 4, 5, "+"], ["chr1", 6, 7, "+"]], columns=[*funny_cols, "strand"], ) df_result = df_result.astype( {funny_cols[1]: pd.Int64Dtype(), funny_cols[2]: pd.Int64Dtype()} ) pd.testing.assert_frame_equal( df_result, bioframe.subtract(df1, df2, cols1=funny_cols, cols2=funny_cols2) .sort_values(funny_cols) .reset_index(drop=True), ) # subtract should ignore empty groups df1 = pd.DataFrame( [ ["chrX", 1, 8], ["chrX", 2, 10], ], columns=["chrom", "start", "end"], ) df2 = pd.DataFrame( [ ["chrX", 1, 8], ], columns=["chrom", "start", "end"], ) df_cat = pd.CategoricalDtype(categories=["chrX", "chr1"], ordered=True) df1 = df1.astype({"chrom": df_cat}) df_subtracted = pd.DataFrame( [ ["chrX", 8, 10], ], columns=["chrom", "start", "end"], ) assert bioframe.subtract(df1, df1).empty pd.testing.assert_frame_equal( df_subtracted.astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}), bioframe.subtract(df1, df2), check_dtype=False, check_categorical=False, ) ## test transferred from deprecated bioframe.split df1 = pd.DataFrame( [["chrX", 3, 8], ["chr1", 4, 7], ["chrX", 1, 5]], columns=["chrom", "start", "end"], ) df2 = pd.DataFrame( [ ["chrX", 4], ["chr1", 5], ], columns=["chrom", "pos"], ) df2["start"] = df2["pos"] df2["end"] = df2["pos"] df_result = ( pd.DataFrame( [ ["chrX", 1, 4], ["chrX", 3, 4], ["chrX", 4, 5], ["chrX", 4, 8], ["chr1", 5, 7], ["chr1", 4, 5], ], columns=["chrom", "start", "end"], ) .sort_values(["chrom", "start", "end"]) .reset_index(drop=True) .astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) ) pd.testing.assert_frame_equal( df_result, bioframe.subtract(df1, df2) .sort_values(["chrom", "start", "end"]) .reset_index(drop=True), ) # Test the case when a chromosome should not be split # (now implemented with subtract) df1 = pd.DataFrame( [ ["chrX", 3, 8], ["chr1", 4, 7], ], columns=["chrom", "start", "end"], ) df2 = pd.DataFrame([["chrX", 4]], columns=["chrom", "pos"]) df2["start"] = df2["pos"].values df2["end"] = df2["pos"].values df_result = ( pd.DataFrame( [ ["chrX", 3, 4], ["chrX", 4, 8], ["chr1", 4, 7], ], columns=["chrom", "start", "end"], ) .sort_values(["chrom", "start", "end"]) .reset_index(drop=True) ) pd.testing.assert_frame_equal( df_result.astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}), bioframe.subtract(df1, df2) .sort_values(["chrom", "start", "end"]) .reset_index(drop=True), ) # Test the case when substraction from point bioframe df1 = pd.DataFrame([["chr1", 1, 1]], columns=["chrom", "start", "end"]).astype( {"start": pd.Int64Dtype(), "end": pd.Int64Dtype()} ) df2 = pd.DataFrame([["chr1", 0, 2]], columns=["chrom", "start", "end"]).astype( {"start": pd.Int64Dtype(), "end": pd.Int64Dtype()} ) df_result = ( pd.DataFrame( [ ["chr1", 0, 1], ["chr1", 1, 2], ], columns=["chrom", "start", "end"], ) .sort_values(["chrom", "start", "end"]) .reset_index(drop=True) ) pd.testing.assert_frame_equal( df_result.astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}), bioframe.subtract(df2, df1) .sort_values(["chrom", "start", "end"]) .reset_index(drop=True), ) # Test the case when substraction from point is at the beginning bioframe df1 = pd.DataFrame([["chr1", 1, 1]], columns=["chrom", "start", "end"]).astype( {"start": pd.Int64Dtype(), "end": pd.Int64Dtype()} ) df2 = pd.DataFrame([["chr1", 1, 2]], columns=["chrom", "start", "end"]).astype( {"start": pd.Int64Dtype(), "end": pd.Int64Dtype()} ) df_result = ( pd.DataFrame( [ ["chr1", 1, 2], ], columns=["chrom", "start", "end"], ) .sort_values(["chrom", "start", "end"]) .reset_index(drop=True) ) pd.testing.assert_frame_equal( df_result.astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}), bioframe.subtract(df2, df1) .sort_values(["chrom", "start", "end"]) .reset_index(drop=True), ) # subtract should ignore null rows df1 = pd.DataFrame( [[pd.NA, pd.NA, pd.NA], ["chr1", 1, 5]], columns=["chrom", "start", "end"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) df2 = pd.DataFrame( [ ["chrX", 1, 5], [pd.NA, pd.NA, pd.NA], ["chr1", 4, 8], [pd.NA, pd.NA, pd.NA], ["chr1", 10, 11], ], columns=["chrom", "start", "end"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) df_subtracted = pd.DataFrame( [ ["chr1", 1, 4], ], columns=["chrom", "start", "end"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) pd.testing.assert_frame_equal(df_subtracted, bioframe.subtract(df1, df2)) df1 = pd.DataFrame( [ [pd.NA, pd.NA, pd.NA], ], columns=["chrom", "start", "end"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) assert len(bioframe.subtract(df1, df2)) == 0 # empty df1 but valid chroms in df2 with pytest.raises(ValueError): # no non-null chromosomes bioframe.subtract(df1, df1) df2 = pd.DataFrame( [ [pd.NA, pd.NA, pd.NA], [pd.NA, pd.NA, pd.NA], ], columns=["chrom", "start", "end"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) with pytest.raises(ValueError): # no non-null chromosomes bioframe.subtract(df1, df2) def test_setdiff(): cols1 = ["chrom1", "start", "end"] cols2 = ["chrom2", "start", "end"] df1 = pd.DataFrame( [ ["chr1", 8, 12, "+", "cat"], ["chr1", 8, 12, "-", "cat"], ["chrX", 1, 8, "+", "cat"], ], columns=[*cols1, "strand", "animal"], ) df2 = pd.DataFrame( [ ["chrX", 7, 10, "-", "dog"], ["chr1", 6, 10, "-", "cat"], ["chr1", 6, 10, "-", "cat"], ], columns=[*cols2, "strand", "animal"], ) assert ( len( bioframe.setdiff( df1, df2, cols1=cols1, cols2=cols2, on=None, ) ) == 0 ) # everything overlaps assert ( len( bioframe.setdiff( df1, df2, cols1=cols1, cols2=cols2, on=["animal"], ) ) == 1 ) # two overlap, one remains assert ( len( bioframe.setdiff( df1, df2, cols1=cols1, cols2=cols2, on=["strand"], ) ) == 2 ) # one overlaps, two remain # setdiff should ignore nan rows df1 = pd.concat([pd.DataFrame([pd.NA]), df1, pd.DataFrame([pd.NA])])[ ["chrom1", "start", "end", "strand", "animal"] ] df1 = df1.astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), } ) df2 = pd.concat([pd.DataFrame([pd.NA]), df2, pd.DataFrame([pd.NA])])[ ["chrom2", "start", "end", "strand", "animal"] ] df2 = df2.astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), } ) assert (2, 5) == np.shape(bioframe.setdiff(df1, df1, cols1=cols1, cols2=cols1)) assert (2, 5) == np.shape(bioframe.setdiff(df1, df2, cols1=cols1, cols2=cols2)) assert (4, 5) == np.shape( bioframe.setdiff(df1, df2, on=["strand"], cols1=cols1, cols2=cols2) ) def test_count_overlaps(): df1 = pd.DataFrame( [ ["chr1", 8, 12, "+", "cat"], ["chr1", 8, 12, "-", "cat"], ["chrX", 1, 8, "+", "cat"], ], columns=["chrom1", "start", "end", "strand", "animal"], ) df2 = pd.DataFrame( [ ["chr1", 6, 10, "+", "dog"], ["chr1", 6, 10, "+", "dog"], ["chrX", 7, 10, "+", "dog"], ["chrX", 7, 10, "+", "dog"], ], columns=["chrom2", "start2", "end2", "strand", "animal"], ) assert ( bioframe.count_overlaps( df1, df2, on=None, cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), )["count"].values == np.array([2, 2, 2]) ).all() assert ( bioframe.count_overlaps( df1, df2, on=["strand"], cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), )["count"].values == np.array([2, 0, 2]) ).all() assert ( bioframe.count_overlaps( df1, df2, on=["strand", "animal"], cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), )["count"].values == np.array([0, 0, 0]) ).all() # overlaps with pd.NA counts_no_nans = bioframe.count_overlaps( df1, df2, on=None, cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), ) df1_na = (pd.concat([pd.DataFrame([pd.NA]), df1, pd.DataFrame([pd.NA])])).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), } )[["chrom1", "start", "end", "strand", "animal"]] df2_na = (pd.concat([pd.DataFrame([pd.NA]), df2, pd.DataFrame([pd.NA])])).astype( { "start2": pd.Int64Dtype(), "end2": pd.Int64Dtype(), } )[["chrom2", "start2", "end2", "strand", "animal"]] counts_nans_inserted_after = ( pd.concat([pd.DataFrame([pd.NA]), counts_no_nans, pd.DataFrame([pd.NA])]) ).astype( { "start": pd.Int64Dtype(), "end": pd.Int64Dtype(), } )[["chrom1", "start", "end", "strand", "animal", "count"]] counts_nans = bioframe.count_overlaps( df1_na, df2_na, on=None, cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), ) pd.testing.assert_frame_equal( counts_nans, bioframe.count_overlaps( df1_na, df2, on=None, cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), ), ) assert ( counts_nans["count"].values == counts_nans_inserted_after["count"].fillna(0).values ).all() ### coverage without return_input returns a single column dataFrame pd.testing.assert_frame_equal( bioframe.count_overlaps( df1_na, df2_na, cols1=("chrom1", "start", "end"), cols2=("chrom2", "start2", "end2"), return_input=False, ), pd.DataFrame(counts_nans["count"]), ) def test_assign_view(): ## default assignment case view_df = pd.DataFrame( [ ["chr11", 1, 8, "chr11p"], ], columns=["chrom", "start", "end", "name"], ) df = pd.DataFrame( [ ["chr11", 0, 10, "+"], ], columns=["chrom", "start", "end", "strand"], ) df_assigned = pd.DataFrame( [ ["chr11", 0, 10, "+", "chr11p"], ], columns=["chrom", "start", "end", "strand", "view_region"], ) pd.testing.assert_frame_equal(df_assigned, bioframe.assign_view(df, view_df)) # non-default columns in view funky_view = view_df.rename(columns={"chrom": "chr"}) pd.testing.assert_frame_equal( df_assigned, bioframe.assign_view( df, view_df=funky_view, cols_view=["chr", "start", "end"], ), ) # assignment with funny view_name_col and an interval on chr2 not cataloged # in the view_df view_df = pd.DataFrame( [ ["chrX", 1, 8, "oranges"], ["chrX", 8, 20, "grapefruit"], ["chr1", 0, 10, "apples"], ], columns=["chrom", "start", "end", "fruit"], ) df = pd.DataFrame( [ ["chr1", 0, 10, "+"], ["chrX", 5, 10, "+"], ["chrX", 0, 5, "+"], ["chr2", 5, 10, "+"], ], columns=["chrom", "start", "end", "strand"], ) df_assigned = pd.DataFrame( [ ["chr1", 0, 10, "+", "apples"], ["chrX", 5, 10, "+", "oranges"], ["chrX", 0, 5, "+", "oranges"], ], columns=["chrom", "start", "end", "strand", "funny_view_region"], ) pd.testing.assert_frame_equal( df_assigned, bioframe.assign_view( df, view_df, view_name_col="fruit", df_view_col="funny_view_region", drop_unassigned=True, ), ) ### keep the interval with NA as its region if drop_unassigned is False df_assigned = pd.DataFrame( [ ["chr1", 0, 10, "+", "apples"], ["chrX", 5, 10, "+", "oranges"], ["chrX", 0, 5, "+", "oranges"], ["chr2", 5, 10, "+", None], ], columns=["chrom", "start", "end", "strand", "funny_view_region"], ) pd.testing.assert_frame_equal( df_assigned, bioframe.assign_view( df, view_df, view_name_col="fruit", df_view_col="funny_view_region", drop_unassigned=False, ), ) ### assign_view with NA values assigns a view of none df = pd.DataFrame( [ ["chr1", 0, 10, "+"], ["chrX", 5, 10, "+"], [pd.NA, pd.NA, pd.NA, "+"], ["chrX", 0, 5, "+"], ["chr2", 5, 10, "+"], ], columns=["chrom", "start", "end", "strand"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) pd.testing.assert_frame_equal( df, bioframe.assign_view(df, view_df, view_name_col="fruit").iloc[:, :-1] ) assert ( bioframe.assign_view(df, view_df, view_name_col="fruit")["view_region"].values == np.array(["apples", "oranges", None, "oranges", None], dtype=object) ).all() def test_sort_bedframe(): view_df = pd.DataFrame( [ ["chrX", 1, 8, "oranges"], ["chrX", 8, 20, "grapefruit"], ["chr1", 0, 10, "apples"], ], columns=["chrom", "start", "end", "fruit"], ) df = pd.DataFrame( [ ["chr2", 5, 10, "+"], ["chr1", 0, 10, "+"], ["chrX", 5, 10, "+"], ["chrX", 0, 5, "+"], ], columns=["chrom", "start", "end", "strand"], ) # sorting just by chrom,start,end df_sorted = pd.DataFrame( [ ["chr1", 0, 10, "+"], ["chr2", 5, 10, "+"], ["chrX", 0, 5, "+"], ["chrX", 5, 10, "+"], ], columns=["chrom", "start", "end", "strand"], ) pd.testing.assert_frame_equal(df_sorted, bioframe.sort_bedframe(df)) # when a view_df is provided, regions without assigned views # are placed last df_sorted = pd.DataFrame( [ ["chrX", 0, 5, "+"], ["chrX", 5, 10, "+"], ["chr1", 0, 10, "+"], ["chr2", 5, 10, "+"], ], columns=["chrom", "start", "end", "strand"], ) # test if sorting after assiging view to df denovo works, pd.testing.assert_frame_equal( df_sorted, bioframe.sort_bedframe(df, view_df, view_name_col="fruit") ) # non-default columns in view funky_view = view_df.rename(columns={"chrom": "chr"}) pd.testing.assert_frame_equal( df_sorted, bioframe.sort_bedframe( df, view_df=funky_view, view_name_col="fruit", cols_view=["chr", "start", "end"], ), ) # also test if sorting after assigning view to df denovo works with # default view_name_col pd.testing.assert_frame_equal( df_sorted, bioframe.sort_bedframe(df, view_df.rename(columns={"fruit": "name"})) ) # also test if sorting after assiging view to df from chromsizes-like # dictionary works: pd.testing.assert_frame_equal( df_sorted, bioframe.sort_bedframe(df, view_df={"chrX": 20, "chr1": 10}) ) ### 'df' has no column 'view_region', so this should raise a ValueError assert pytest.raises( ValueError, bioframe.sort_bedframe, df, view_df, view_name_col="fruit", df_view_col="view_region", ) ### sort_bedframe with NA entries: df = pd.DataFrame( [ ["chr1", 0, 10, "+"], ["chrX", 5, 10, "+"], [pd.NA, pd.NA, pd.NA, "+"], ["chrX", 0, 5, "+"], ["chr2", 5, 10, "+"], ], columns=["chrom", "start", "end", "strand"], ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) # NA put at end assert pd.isna(bioframe.sort_bedframe(df)["chrom"].values[-1]) assert pd.isna( bioframe.sort_bedframe(df, view_df, view_name_col="fruit")["chrom"].values[-1] ) assert ( df.dtypes == bioframe.sort_bedframe(df, view_df, view_name_col="fruit").dtypes ).all() open2c-bioframe-4fe9b25/tests/test_ops_select.py000066400000000000000000000144271477525772300220520ustar00rootroot00000000000000import pandas as pd import pytest import bioframe def test_select(): df = pd.DataFrame( [["chrX", 3, 8], ["chr1", 4, 5], ["chrX", 1, 5]], columns=["chrom", "start", "end"], ) result = pd.DataFrame([["chr1", 4, 5]], columns=["chrom", "start", "end"]) pd.testing.assert_frame_equal( result, bioframe.select(df, "chr1:4-10").reset_index(drop=True) ) result = pd.DataFrame( [["chrX", 3, 8], ["chrX", 1, 5]], columns=["chrom", "start", "end"] ) pd.testing.assert_frame_equal( result, bioframe.select(df, "chrX").reset_index(drop=True) ) result = pd.DataFrame( [["chrX", 3, 8], ["chrX", 1, 5]], columns=["chrom", "start", "end"] ) pd.testing.assert_frame_equal( result, bioframe.select(df, "chrX:4-6").reset_index(drop=True) ) # Query range not in the dataframe assert len(bioframe.select(df, "chrZ")) == 0 assert len(bioframe.select(df, "chr1:100-1000")) == 0 assert len(bioframe.select(df, "chr1:1-3")) == 0 # Invalid query range with pytest.raises(ValueError): bioframe.select(df, "chr1:1-0") def test_select__with_colnames(): ### select with non-standard column names new_names = ["chr", "chrstart", "chrend"] df = pd.DataFrame( [["chrX", 3, 8], ["chr1", 4, 5], ["chrX", 1, 5]], columns=new_names, ) result = pd.DataFrame( [["chrX", 3, 8], ["chrX", 1, 5]], columns=new_names, ) pd.testing.assert_frame_equal( result, bioframe.select(df, "chrX:4-6", cols=new_names).reset_index(drop=True) ) pd.testing.assert_frame_equal( result, bioframe.select(df, "chrX", cols=new_names).reset_index(drop=True) ) def test_select__with_nulls(): ### select from a DataFrame with NaNs colnames = ["chrom", "start", "end", "view_region"] df = pd.DataFrame( [ ["chr1", -6, 12, "chr1p"], [pd.NA, pd.NA, pd.NA, "chr1q"], ["chrX", 1, 8, "chrX_0"], ], columns=colnames, ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) result = pd.DataFrame( [["chr1", -6, 12, "chr1p"]], columns=colnames, ).astype({"start": pd.Int64Dtype(), "end": pd.Int64Dtype()}) pd.testing.assert_frame_equal( result, bioframe.select(df, "chr1:0-1").reset_index(drop=True) ) def test_select__mask_indices_labels(): df = pd.DataFrame( [["chrX", 3, 8], ["chr1", 4, 5], ["chrX", 1, 5]], columns=["chrom", "start", "end"], ) region = "chr1:4-10" answer = pd.DataFrame([["chr1", 4, 5]], columns=["chrom", "start", "end"]) result = bioframe.select(df, region) pd.testing.assert_frame_equal(answer, result.reset_index(drop=True)) mask = bioframe.select_mask(df, region) pd.testing.assert_frame_equal(answer, df.loc[mask].reset_index(drop=True)) labels = bioframe.select_labels(df, region) pd.testing.assert_frame_equal(answer, df.loc[labels].reset_index(drop=True)) idx = bioframe.select_indices(df, region) pd.testing.assert_frame_equal(answer, df.iloc[idx].reset_index(drop=True)) def test_select__query_intervals_are_half_open(): df = pd.DataFrame( { "chrom": ["chr1", "chr1", "chr2", "chr2", "chr2", "chr2", "chr2", "chr2"], "start": [0, 10, 10, 20, 30, 40, 50, 60], "end": [10, 20, 20, 30, 40, 50, 60, 70], "name": ["a", "b", "A", "B", "C", "D", "E", "F"], } ) result = bioframe.select(df, "chr1") assert (result["name"] == ["a", "b"]).all() result = bioframe.select(df, "chr2:20-70") assert (result["name"] == ["B", "C", "D", "E", "F"]).all() result = bioframe.select(df, "chr2:20-75") assert (result["name"] == ["B", "C", "D", "E", "F"]).all() result = bioframe.select(df, "chr2:20-") assert (result.index == [3, 4, 5, 6, 7]).all() result = bioframe.select(df, "chr2:20-30") assert (result["name"] == ["B"]).all() result = bioframe.select(df, "chr2:20-40") assert (result["name"] == ["B", "C"]).all() result = bioframe.select(df, "chr2:20-45") assert (result["name"] == ["B", "C", "D"]).all() result = bioframe.select(df, "chr2:19-45") assert (result["name"] == ["A", "B", "C", "D"]).all() result = bioframe.select(df, "chr2:25-45") assert (result["name"] == ["B", "C", "D"]).all() result = bioframe.select(df, "chr2:25-50") assert (result["name"] == ["B", "C", "D"]).all() result = bioframe.select(df, "chr2:25-51") assert (result["name"] == ["B", "C", "D", "E"]).all() def test_select__with_point_intervals(): # Dataframe containing "point intervals" df = pd.DataFrame( { "chrom": ["chr1", "chr1", "chr2", "chr2", "chr2", "chr2", "chr2", "chr2"], "start": [0, 10, 10, 20, 30, 40, 50, 60], "end": [10, 10, 20, 30, 40, 50, 50, 70], "name": ["a", "b", "A", "B", "C", "D", "E", "F"], } ) result = bioframe.select(df, "chr1") assert (result["name"] == ["a", "b"]).all() result = bioframe.select(df, "chr1:4-10") assert (result["name"] == ["a"]).all() result = bioframe.select(df, "chr1:4-4") assert (result["name"] == ["a"]).all() result = bioframe.select(df, "chr1:10-15") assert (result["name"] == ["b"]).all() result = bioframe.select(df, "chr2:20-70") assert (result["name"] == ["B", "C", "D", "E", "F"]).all() result = bioframe.select(df, "chr2:49-70") assert (result["name"] == ["D", "E", "F"]).all() result = bioframe.select(df, "chr2:50-70") assert (result["name"] == ["E", "F"]).all() result = bioframe.select(df, "chr2:50-51") assert (result["name"] == ["E"]).all() result = bioframe.select(df, "chr2:50-50") assert (result["name"] == ["E"]).all() def test_select__with_points(): # Dataframe of points df = pd.DataFrame( [["chrX", 3, "A"], ["chr1", 4, "C"], ["chrX", 1, "B"]], columns=["chrom", "pos", "name"], ) result = bioframe.select(df, "chr1:4-10", cols=["chrom", "pos", "pos"]) assert (result["name"] == ["C"]).all() result = bioframe.select(df, "chr1:3-10", cols=["chrom", "pos", "pos"]) assert (result["name"] == ["C"]).all() result = bioframe.select(df, "chr1:4-4", cols=["chrom", "pos", "pos"]) assert (result["name"] == ["C"]).all() open2c-bioframe-4fe9b25/tests/test_resources.py000066400000000000000000000026221477525772300217160ustar00rootroot00000000000000import pandas as pd import bioframe def test_fetch_chromsizes(): db = "hg38" for provider in ["local", "ucsc"]: chromsizes = bioframe.fetch_chromsizes(db, provider=provider) assert isinstance(chromsizes, pd.Series) assert chromsizes.name == "length" assert len(chromsizes) == 25 chromsizes_df = bioframe.fetch_chromsizes(db, provider=provider, as_bed=True) assert isinstance(chromsizes_df, pd.DataFrame) assert list(chromsizes_df.columns) == ["chrom", "start", "end"] assert len(chromsizes_df) == 25 # Check synonymous local assemblies assert bioframe.fetch_chromsizes("hg38", provider="local").equals( bioframe.fetch_chromsizes("GRCh38", provider="local") ) def test_fetch_chromsizes_local_vs_ucsc(): for db in ["hg19", "hg38", "mm9", "mm10"]: assert bioframe.fetch_chromsizes(db, provider="local").equals( bioframe.fetch_chromsizes(db, provider="ucsc") ) def test_fetch_centromeres(): for db in ["hg19", "hg38"]: # Note: UCSC will usually have a different ordering of chromosomes for provider in ["local", "ucsc"]: centromeres = bioframe.fetch_centromeres(db, provider=provider) assert isinstance(centromeres, pd.DataFrame) assert list(centromeres.columns) == ["chrom", "start", "end", "mid"] assert len(centromeres) == 24 open2c-bioframe-4fe9b25/tests/test_vis.py000066400000000000000000000031641477525772300205070ustar00rootroot00000000000000import numpy as np import pandas as pd import pytest import bioframe def test_to_ucsc_colorstring(): assert bioframe.to_ucsc_colorstring("red") == "255,0,0" assert bioframe.to_ucsc_colorstring("blue") == "0,0,255" assert bioframe.to_ucsc_colorstring("green") == "0,128,0" assert bioframe.to_ucsc_colorstring("black") == "0,0,0" assert bioframe.to_ucsc_colorstring("white") == "255,255,255" assert bioframe.to_ucsc_colorstring("r") == "255,0,0" assert bioframe.to_ucsc_colorstring("tomato") == "255,99,71" assert bioframe.to_ucsc_colorstring("xkcd:sky blue") == "117,187,253" assert bioframe.to_ucsc_colorstring("#abc") == "170,187,204" assert bioframe.to_ucsc_colorstring("#ff0000") == "255,0,0" assert bioframe.to_ucsc_colorstring("#ff000055") == "255,0,0" assert bioframe.to_ucsc_colorstring((1, 0, 0)) == "255,0,0" assert bioframe.to_ucsc_colorstring((1, 0, 0, 0.5)) == "255,0,0" assert bioframe.to_ucsc_colorstring((0, 0, 1)) == "0,0,255" assert bioframe.to_ucsc_colorstring(None) == "0" assert bioframe.to_ucsc_colorstring("none") == "0" assert bioframe.to_ucsc_colorstring(np.nan) == "0" assert bioframe.to_ucsc_colorstring(pd.NA) == "0" with pytest.raises(ValueError): bioframe.to_ucsc_colorstring("notacolor") df = bioframe.from_any( [ ["chr1", 0, 10, "red"], ["chr1", 10, 20, "blue"], ["chr2", 0, 10, "green"], ["chr2", 10, 20, None], ] ) df["itemRgb"] = df["name"].apply(bioframe.to_ucsc_colorstring) assert df["itemRgb"].tolist() == ["255,0,0", "0,0,255", "0,128,0", "0"]