From 9a69a126877a2f8bf9024aacf58a10cf02a76564 Mon Sep 17 00:00:00 2001 From: David Dias Date: Sun, 4 Dec 2016 04:20:28 +0000 Subject: [PATCH] docs: update architecture overview and core architecture image, add more info to the readme --- README.md | 81 ++++++++++++++++++++++++++++++--------- graphs/arch-full.monopic | Bin 3369 -> 0 bytes graphs/arch-full.txt | 46 ---------------------- graphs/arch.monopic | Bin 1441 -> 0 bytes graphs/arch.txt | 9 ----- img/core.monopic | Bin 0 -> 4232 bytes img/core.png | Bin 0 -> 82147 bytes img/core.txt | 36 +++++++++++++++++ img/overview.monopic | Bin 0 -> 2095 bytes img/overview.png | Bin 0 -> 34348 bytes img/overview.txt | 17 ++++++++ 11 files changed, 115 insertions(+), 74 deletions(-) delete mode 100644 graphs/arch-full.monopic delete mode 100644 graphs/arch-full.txt delete mode 100644 graphs/arch.monopic delete mode 100644 graphs/arch.txt create mode 100644 img/core.monopic create mode 100644 img/core.png create mode 100644 img/core.txt create mode 100644 img/overview.monopic create mode 100644 img/overview.png create mode 100644 img/overview.txt diff --git a/README.md b/README.md index 8d6bc04410..3974189ba0 100644 --- a/README.md +++ b/README.md @@ -251,27 +251,70 @@ Every IPFS instance also exposes the libp2p API at `ipfs.libp2p`. The formal int ### [Runtime Support](https://github.com/ipfs/js-ipfs/issues/536) +### Code Architecture and folder Structure + +![](/img/overview.png) + +##### Source code + +```Bash +> tree src -L 2 +src # Main source code folder +├── cli # Implementation of the IPFS CLI +│   └── ... +├── http-api # The HTTP-API implementation of IPFS as defined by http-api-spec +├── core # IPFS implementation, the core (what gets loaded in browser) +│   ├── components # Each of IPFS subcomponent +│   └── ... +└── ... +``` + +### IPFS Core Architecture + +![](/img/core.png) + +What does this image explain? + +- IPFS uses `ipfs-repo` which picks `fs` or `indexeddb` as its storage drivers, depending if it is running in Node.js or in the Browser. +- The exchange protocol, `bitswap`, uses the Block Service which in turn uses the Repo, offering a get and put of blocks to the IPFS implementation. +- The DAG api (previously Object) comes from the IPLD Resolver, it can support several IPLD Formats (i.e: dag-pb, dag-cbor, etc). +- The Files API uses `ipfs-unixfs-engine` to import and export files to and from IPFS. +- Swarm, the component that offers a network API, uses libp2p to dial and listen for connections, use the DHT, discovery mechanisms and more. libp2p-ipfs-nodejs is used in case of running in Node.js and libp2p-ipfs-browser is used in the case of the Browser. + ## Packages -| Package | Version | Dependencies | DevDependencies | -|--------|-------|------------|----------| -| [`ipfs`](//github.com/ipfs/js-ipfs) | [![npm](https://img.shields.io/npm/v/ipfs.svg?maxAge=86400&style=flat-square)](https://github.com/ipfs/js-ipfs/releases) | [![Dependency Status](https://david-dm.org/ipfs/js-ipfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs) | [![devDependency Status](https://david-dm.org/ipfs/js-ipfs/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs?type=dev) | -| [`ipfs-api`](//github.com/ipfs/js-ipfs-api) | [![npm](https://img.shields.io/npm/v/ipfs-api.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-api/releases) | [![Dependency Status](https://david-dm.org/ipfs/js-ipfs-api.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-api) | [![devDependency Status](https://david-dm.org/ipfs/js-ipfs-api/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-api?type=dev) | -| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Dependency Status](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![devDependency Status](https://david-dm.org/ipfs/js-ipfs-unixfs-engine/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine?type=dev) | -| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Dependency Status](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![devDependency Status](https://david-dm.org/ipfs/js-ipfs-repo/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo?type=dev) | -| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Dependency Status](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![devDependency Status](https://david-dm.org/ipfs/js-ipfs-unixfs/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs?type=dev) | -| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Dependency Status](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![devDependency Status](https://david-dm.org/ipfs/js-ipfs-block-service/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service?type=dev) | -| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Dependency Status](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![devDependency Status](https://david-dm.org/ipfs/js-ipfs-block/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block?type=dev) | -| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Dependency Status](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![devDependency Status](https://david-dm.org/libp2p/js-peer-id/dev-status.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id?type=dev) | -| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Dependency Status](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![devDependency Status](https://david-dm.org/libp2p/js-peer-info/dev-status.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info?type=dev) | -| [`ipfs-merkle-dag`](//github.com/vijayee/js-ipfs-merkle-dag) | [![npm](https://img.shields.io/npm/v/ipfs-merkle-dag.svg?maxAge=86400&style=flat-square)](//github.com/vijayee/js-ipfs-merkle-dag/releases) | [![Dependency Status](https://david-dm.org/vijayee/js-ipfs-merkle-dag.svg?style=flat-square)](https://david-dm.org/vijayee/js-ipfs-merkle-dag) | [![devDependency Status](https://david-dm.org/vijayee/js-ipfs-merkle-dag/dev-status.svg?style=flat-square)](https://david-dm.org/vijayee/js-ipfs-merkle-dag?type=dev) | -| [`ipfs-multipart`](//github.com/xicombd/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/xicombd/ipfs-multipart/releases) | [![Dependency Status](https://david-dm.org/xicombd/ipfs-multipart.svg?style=flat-square)](https://david-dm.org/xicombd/ipfs-multipart) | [![devDependency Status](https://david-dm.org/xicombd/ipfs-multipart/dev-status.svg?style=flat-square)](https://david-dm.org/xicombd/ipfs-multipart?type=dev) | -| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Dependency Status](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![devDependency Status](https://david-dm.org/multiformats/js-multiaddr/dev-status.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr?type=dev) | -| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Dependency Status](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![devDependency Status](https://david-dm.org/multiformats/js-multihashing/dev-status.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing?type=dev) | -| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Dependency Status](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![devDependency Status](https://david-dm.org/multiformats/js-multihash/dev-status.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash?type=dev) | -| [`mafmt`](//github.com/whyrusleeping/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/whyrusleeping/js-mafmt/releases) | [![Dependency Status](https://david-dm.org/whyrusleeping/js-mafmt.svg?style=flat-square)](https://david-dm.org/whyrusleeping/js-mafmt) | [![devDependency Status](https://david-dm.org/whyrusleeping/js-mafmt/dev-status.svg?style=flat-square)](https://david-dm.org/whyrusleeping/js-mafmt?type=dev) | - -In addition there is the libp2p module family that makes up the network layer, the full list can be found [here](//github.com/libp2p/js-libp2p#packages) +| Package | Version | Deps | DevDeps | +|---------|---------|--------------|-----------------| +| **API Specs** | +| [`interface-ipfs-core`](https://github.com/ipfs/interface-ipfs-core) | +| [`http-api-spec`](https://github.com/ipfs/http-api-spec) | +| [`cli spec`](https://github.com/ipfs/specs/tree/master/public-api/cli) | +| **Repo** | +| [`ipfs-repo`](//github.com/ipfs/js-ipfs-repo) | [![npm](https://img.shields.io/npm/v/ipfs-repo.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-repo/releases) | [![Dep Status](https://david-dm.org/ipfs/js-ipfs-repo.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo) | [![devDep Status](https://david-dm.org/ipfs/js-ipfs-repo/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-repo?type=dev) | +| **DAG** | +| [`ipld-resolver`](https://github.com/ipld/js-ipld-resolver) | +| [`ipld-dag-pb`](https://github.com/ipld/js-ipld-dag-pb) | +| [`ipld-dag-cbor`](https://github.com/ipld/js-ipld-dag-cbor) | +| **Files** | +| [`ipfs-unixfs-engine`](//github.com/ipfs/js-ipfs-unixfs-engine) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs-engine.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs-engine/releases) | [![Dep Status](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) | [![devDep Status](https://david-dm.org/ipfs/js-ipfs-unixfs-engine/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine?type=dev) | +| **Exchange** | +| [`ipfs-block-service`](//github.com/ipfs/js-ipfs-block-service) | [![npm](https://img.shields.io/npm/v/ipfs-block-service.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block-service/releases) | [![Dep Status](https://david-dm.org/ipfs/js-ipfs-block-service.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service) | [![devDep Status](https://david-dm.org/ipfs/js-ipfs-block-service/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block-service?type=dev) | +| **Swarm/libp2p** | +| [`js-libp2p`](https://github.com/libp2p/js-libp2p) | +| [`libp2p-ipfs-nodejs`](//github.com/ipfs/js-libp2p-ipfs-nodejs) | [![npm](https://img.shields.io/npm/v/libp2p-ipfs-nodejs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-libp2p-ipfs-nodejs/releases) | [![Dep Status](https://david-dm.org/ipfs/js-libp2p-ipfs-nodejs.svg?style=flat-square)](https://david-dm.org/ipfs/js-libp2p-ipfs-nodejs) | [![devDep Status](https://david-dm.org/ipfs/js-libp2p-ipfs-nodejs/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-libp2p-ipfs-nodejs?type=dev) | +| [`libp2p-ipfs-browser`](//github.com/ipfs/js-libp2p-ipfs-browser) | [![npm](https://img.shields.io/npm/v/libp2p-ipfs-browser.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-libp2p-ipfs-browser/releases) | [![Dep Status](https://david-dm.org/ipfs/js-libp2p-ipfs-browser.svg?style=flat-square)](https://david-dm.org/ipfs/js-libp2p-ipfs-browser) | [![devDep Status](https://david-dm.org/ipfs/js-libp2p-ipfs-browser/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-libp2p-ipfs-browser?type=dev) | +| **Data Types** | +| [`ipfs-block`](//github.com/ipfs/js-ipfs-block) | [![npm](https://img.shields.io/npm/v/ipfs-block.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-block/releases) | [![Dep Status](https://david-dm.org/ipfs/js-ipfs-block.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block) | [![devDep Status](https://david-dm.org/ipfs/js-ipfs-block/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-block?type=dev) | +| [`ipfs-unixfs`](//github.com/ipfs/js-ipfs-unixfs) | [![npm](https://img.shields.io/npm/v/ipfs-unixfs.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-unixfs/releases) | [![Dep Status](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) | [![devDep Status](https://david-dm.org/ipfs/js-ipfs-unixfs/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs?type=dev) | +| [`peer-id`](//github.com/libp2p/js-peer-id) | [![npm](https://img.shields.io/npm/v/peer-id.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-id/releases) | [![Dep Status](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) | [![devDep Status](https://david-dm.org/libp2p/js-peer-id/dev-status.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id?type=dev) | +| [`peer-info`](//github.com/libp2p/js-peer-info) | [![npm](https://img.shields.io/npm/v/peer-info.svg?maxAge=86400&style=flat-square)](//github.com/libp2p/js-peer-info/releases) | [![Dep Status](https://david-dm.org/libp2p/js-peer-info.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info) | [![devDep Status](https://david-dm.org/libp2p/js-peer-info/dev-status.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-info?type=dev) | +| [`multiaddr`](//github.com/multiformats/js-multiaddr) | [![npm](https://img.shields.io/npm/v/multiaddr.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multiaddr/releases) | [![Dep Status](https://david-dm.org/multiformats/js-multiaddr.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr) | [![devDep Status](https://david-dm.org/multiformats/js-multiaddr/dev-status.svg?style=flat-square)](https://david-dm.org/multiformats/js-multiaddr?type=dev) | +| [`multihashes`](//github.com/multiformats/js-multihash) | [![npm](https://img.shields.io/npm/v/multihashes.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihash/releases) | [![Dep Status](https://david-dm.org/multiformats/js-multihash.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash) | [![devDep Status](https://david-dm.org/multiformats/js-multihash/dev-status.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihash?type=dev) | +| **Generics/Utils** | +| [`ipfs-api`](//github.com/ipfs/js-ipfs-api) | [![npm](https://img.shields.io/npm/v/ipfs-api.svg?maxAge=86400&style=flat-square)](//github.com/ipfs/js-ipfs-api/releases) | [![Dep Status](https://david-dm.org/ipfs/js-ipfs-api.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-api) | [![devDep Status](https://david-dm.org/ipfs/js-ipfs-api/dev-status.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-api?type=dev) | +| [`ipfs-multipart`](//github.com/xicombd/ipfs-multipart) | [![npm](https://img.shields.io/npm/v/ipfs-multipart.svg?maxAge=86400&style=flat-square)](//github.com/xicombd/ipfs-multipart/releases) | [![Dep Status](https://david-dm.org/xicombd/ipfs-multipart.svg?style=flat-square)](https://david-dm.org/xicombd/ipfs-multipart) | [![devDep Status](https://david-dm.org/xicombd/ipfs-multipart/dev-status.svg?style=flat-square)](https://david-dm.org/xicombd/ipfs-multipart?type=dev) | +| [`multihashing`](//github.com/multiformats/js-multihashing) | [![npm](https://img.shields.io/npm/v/multihashing.svg?maxAge=86400&style=flat-square)](//github.com/multiformats/js-multihashing/releases) | [![Dep Status](https://david-dm.org/multiformats/js-multihashing.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing) | [![devDep Status](https://david-dm.org/multiformats/js-multihashing/dev-status.svg?style=flat-square)](https://david-dm.org/multiformats/js-multihashing?type=dev) | +| [`mafmt`](//github.com/whyrusleeping/js-mafmt) | [![npm](https://img.shields.io/npm/v/mafmt.svg?maxAge=86400&style=flat-square)](//github.com/whyrusleeping/js-mafmt/releases) | [![Dep Status](https://david-dm.org/whyrusleeping/js-mafmt.svg?style=flat-square)](https://david-dm.org/whyrusleeping/js-mafmt) | [![devDep Status](https://david-dm.org/whyrusleeping/js-mafmt/dev-status.svg?style=flat-square)](https://david-dm.org/whyrusleeping/js-mafmt?type=dev) | ## Contribute diff --git a/graphs/arch-full.monopic b/graphs/arch-full.monopic deleted file mode 100644 index 6238cb1cb863f0bb92aeae10341e625ee6019718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3369 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 diff --git a/graphs/arch-full.txt b/graphs/arch-full.txt deleted file mode 100644 index ce3958e0f6..0000000000 --- a/graphs/arch-full.txt +++ /dev/null @@ -1,46 +0,0 @@ - - ▶ ┌───────────────────────────────────────────────────────────────────────────────┐ - │ IPFS Core │ - │ └───────────────────────────────────────────────────────────────────────────────┘ - │ - │ │ - │ - │ ┌──────────────┬──────────────┼────────────┬─────────────────┐ - │ │ │ │ │ - │ │ │ │ │ │ - ▼ │ ▼ │ ▼ - │ ┌──────────────────┐ │ ┌──────────────────┐ │ ┌──────────────────┐ - │ │ │ │ │ │ │ │ - │ │ Block Service │ │ │ DAGService │ │ │ IPFS Repo │ - │ │ │ │ │ │ │ │ - │ └──────────────────┘ │ └──────────────────┘ │ └──────────────────┘ - │ │ │ │ - IPFS Core │ ▼ │ ┌────┴────┐ │ - ┌────────┐ │ ▼ ▼ │ - │ │ Block │ │ ┌────────┐┌────────┐ │ - └────────┘ │ │DAGNode ││DAGLink │ │ - │ │ └────────┘└────────┘ │ - ┌──────────────────┐ │ │ ┌──────────────────┐ - │ │ │ │ │ │ │ - │ Bitswap │◀────┤ ├──────▶│ Importer │ - │ │ │ │ │ │ │ - └──────────────────┘ │ │ └──────────────────┘ - │ │ │ │ - │ │ ┌────┴────┐ - │ │ │ ▼ ▼ - │ │ ┌────────┐┌────────┐ - │ ┌──────────────────┐ │ │ │ layout ││chunker │ - │ │ │ ┌────────────┘ └────────┘└────────┘ - │ │ Files │◀────┘ │ - │ │ │ - │ └──────────────────┘ │ - ▶ │ - ▼ - ┌───────────────────────────────────────────────────────────────────────────────┐ - │ │ - │ │ - │ │ - │ libp2p │ - │ │ - │ │ - └───────────────────────────────────────────────────────────────────────────────┘ \ No newline at end of file diff --git a/graphs/arch.monopic b/graphs/arch.monopic deleted file mode 100644 index 5dae163b8d6f5aa211b1c951ea04d3d33692836b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1441 zcmV;S1z!69O;1iwP)S1pABzY8000000t4k*TW_OA6#gsGJQImCGhoQuYNe_xt*WZs zw<@x*8QXL*q=2)VM*i=eE9ROSlZll0fs2RXn{%IY4t_@Y>TkBLN_6)uZf~);Nt28% z!5=?=lpzh&@PE%meteCT@>d(dZ1af zXG<0*RbyQ_6o5PC=1u6TURM z#lCY(5q~$@O4`J7eEch)eh!%A_d=iHwJQYAn4(L-ZJ zPw=26n{PHHtM~)g5%f!uC;^drP9ktP$4}^v)`J|CrTjf~BC$mt5mc?KU6CKQyIM(6 zRYmKaU{LXQR6O{?8diA`vqAwct3qK{>}R!%(qx;7C8RdS6fI^ZoX(ilvg?uBUEgW1 zy3(r_+`yx3dq|^VsU}F)H-)gfC|mFHq9IQrRMEmoONG-h{=VWn<}P?pZ?2;C_brzl z*LrQQJ!v*3b*#o%Zf*V89aFhts!aYBCcbb88Z@R6M>M*qF>e7&)Rs63EsnN^^`LgH zKa|K*pB-q>#b3@II zCmcbq-j0xi0kAEjv?VwdH&0~N!3Z8p+9#zGJnC)$ssaA)UUv#7QA_+O%u{p`ApKiy&}3WH9jmVhCy)^nure#SNuz z(rC*W1p`edLx*QVW3UDdGRmH&215bK==51BPrIFp0a~40)G{a>H7;@O;9_El-sy&c z&()r14H^P_R4*n&`)5K^u%tt3jbt3oAsKz)Pk-mfFZ}qEA2QT|iy1x)60y0H6>+L4d%hg-E4?HFq`>%f;Lm zg)5U8vuP;Gv=Yf`b-5>Ex(H>+8(DNK2;>YUtH=YjerxRRRH zeZ`v9yRc^UsN^s8*F^?OC#2HL5|jAyO+D}VY; zAEN2^NngKAXz2A@c{O#gxGbe4`1Bcsz{P1PHzOk^dKrk{_#T6OYu{sN`wK)k(lX%a z3intCGFuekz}jaVI@*Q_X19)rXYcEiK#tM}o|p(EFu}cK|17h^e#HvuVZM9>azEmX z(qjW&V=q8hJ+TYm(D7asuy^J z>cyQ>z0lw?-y-&czCYG8CbQiOMxfs$e0s{)`?)Ts!^;tZpD7Tq^(o?3l(q diff --git a/graphs/arch.txt b/graphs/arch.txt deleted file mode 100644 index 29871aa032..0000000000 --- a/graphs/arch.txt +++ /dev/null @@ -1,9 +0,0 @@ -┌───┐ ┌───────────────┐ ┌──────────────┐ -│CLI│───▶│ HTTP API ├───▶│IPFS Node Impl│ -└───┘ └───────────────┘ └──────────────┘ - △ △ - └──────────┬─────────┘ - │ - ┌─────┐ - │Tests│ - └─────┘ \ No newline at end of file diff --git a/img/core.monopic b/img/core.monopic new file mode 100644 index 0000000000000000000000000000000000000000..fc80ff7757a59e7e93f380679b90128b1d9eaa1e GIT binary patch literal 4232 zcmV;35O?qYO;1iwP)S1pABzY8000000t4+`-EZT#5&u^fewGVz_`PqvD_RujLvi<5 z90Dg+65l0uYCF4oUF3hSNJ=Bgk+PBKaU3BJmIa#{N)*ZY&G+}&=JNOaYQLL({_aob zLiw}h=IUabU(Y^=-}o$>EmzxJzMp+&*=+ykLw>PZ&OURV%^o(Zb@B7eWiWfnVsjyX zNMl>{dGWB>t@f+Ux}c<+WWke-e_dSPEpCdN<0Wm)2a{H>Bn^DzqtAiKY_1hPf4s@M zt<5^9?pNRPyD;qg{M-KGYO~(wp4@+a%i=GA{LcUIRNW!-&F?qM{O-axsi-Mg&?^aC zT;ApDWnOf<-#+HqYSI#0Im^GMim*7x($aVtsYH**2d@n%My%|8Snr-R9~Ke?QlYyItNj61S`6GGAkZ z%f;0nH`~qQdU@f8aQ3-)XIJ~%;+LD-u15LVKMOwaesR-&Rlsl*HrLnTP0m=xX4SLo zR{twHnQ@kh;iG(*iU&2)qppMhR10Q!nPcQ){p!0$92(tarR3b z>AU=s!<)L=Y}bCodEHMnVaj(7Mcd7Gb+cNBDX5FiHC}%3pzRl2_Fg{L%2O{^#Gm2y z;^HVDzwvV8nZ+|#ohgQAeD)jmwp{FP>p}ZIdkC-PF&sC=@#%0>?pj0TFUPTtuOv;Lo%=afe7+Q)RoNz=J-fx(Tx5Pfm_z*H;fsZ1Jdc0GRx%t_IO=dT z;b_Cr#jDDT+kCOSSa0@=IE|re z*1WKx?ed#@|2)OhyxdO*=W4Ky`^7`EPse6`Trmts930WZC7y$d>Mq-N==^;>+^E}S8`^}dee?EK_ z<-OSRxfNhyBrN6HWb>L0NFr3qogI6F;31R4ClzcQmjpBJ26!fsM=E(nZ#)cWb9X75 z0P~>h#Rm<$4FaY5v03$?mQaEcX%dvi5zs((lg5yd=9~?t?OsV+499Tr+S^u+?6$ep z=d-SOxA-je+l$Y_y?60hrHaq<0&~t~ngDHIFF;G#5}>tbMVv~27AP!B6qY5&Gr%)3 zNda1_L;-pPKX|RQ2-=*@4#i)gf*ifeOTsY((SulmYBCA1fMPVbHNw`jc<+ixW5IPd z$Fpa^@yxsDcs!lsC2Ne;>lvPHGd#|829k>58Dw}C8J5cV&u9^IJFEMr&K%$-NIo?6d=%$DIO4W z3B+7N%xXuSdT*E_4ihF-@gT_dOpt;~>N9luTqlWqo1`VXY3Jy)DnJLZl|3Uw*3H1o z889%zKNJZkRU{bwT#-QLdS;M;8DwAv8JIx^W~Rx&OezE8iV-@0xlwS~N;(rXlPTU3 z1xv0}2O~vlp)(G(M+21z8nrK@ebGJ@|NdHhzWQCc^f9|HKA$>#%Xr3v0~rqvWIQ;K z@!&wlg98~4u4BCE3Z{;ryYjvc2?{1vYc?#Q;X{lR2uI+`*WQyMwB~c3tY{L18V+lE z%uvDL@mez!>oP-WnY`foK7Ed%{`YVzfm_Wl+y1+oQ%f18$_nM*!U^1L(AU z9zX|F3`rwH(#ViBG9--*Nt;P(F|5bBk*IEKcM6S>i9MP>8shNA#)4@bHCP>!5bIl`K7 zRA@To2uIw>5qENoCFYpmfxAg6M|dg}b&P5^7-_naHWL^`>o}c1!WpTBbejF^FU7yr z=Q;21LTE#hC^QoGFshhq)dSjmGoBNbs%ieCMONY`(Gqhaud?)8iAEQ03klL+dM9D=9h2&N;2pe14my4w47we{;N zLex|NqGpoW15Il3z_47qdVAqHp3U{<5a`YfWZe_Ad(t;of4gC0fT~5*ok8qiiNp=L zoCuY%tTL5VSfWA_)m*Bk62=;1s4+SX*Fi6sVgsQE8r{%`7^9MB2%jmH7DrZ)XSaY=f(QV zV)u!6Mvl{~ib$@V2FlgTMR^cm%hQr!YH zKZBIZoPVh3PpP8kExbhNzQ~XfG2}!HnOuX*@hNKPd2+U87?(%V(Ip*JBQ5ntHlj&l zcEL%d*ae|8Gd#yGAg%)hc7Vvv`z_Gr-EH?hFz+q|j7gk#*Jmjhl6RNWrQ#0LesT9u z^y(?`YGUm2|6Z&g?=SOhz%WHKUOcl7Eo3+rYmv*RMmNP>Tm`7wdR8_=kSgWL-9fgc zRbp3St-CT+cTC%TB-alzKaU#A8Gej>D?sHYq2LIHQO+2lC%L1eZPMJF{#jblDht}T z@_Si2sQuI#MKmH?JiafRo{m}4RV;wCWP3l{Cx%)$FUx&oQ$}{}Uf4f|SUAtn(8-84 z2$Lo;FUxqkoAQl3ly4=)5uo;(>rOhX-#!DQdiNe)GF96yv$;rPow)EA*--nR!tsCtegl=MLYw6+p0!yzO29n!WeUK%{O4;)JF*h`~QC z+Z#|t9|7(HfZG7zJ^&b-G`cCO9~MZbp}teEYgG#LcGt6 z;G=U>b2c0!hc5Kw&}L_lLz{^Y3&1HY0IY@Kz>t{$Ty4@uZ9hY!Hbbj66H~MRuw)Py zz2Lj*5vX+UXu28=jxH;ZqJy^Cdx$=-*gI3?+x(b*AWK8F3CSS!LA7GVwz(F}lpx zE(e4{qC$aCp+Kl=mp1fiQ+kp@VhBk{!yLLdB+DcViH!G_gp}z{?1ZH$)Nyt5SEX)# z(_iwsV`Fr}LMRi#>$L?lRW(^Dev(X$ZY6d$l7XSvz8ga-@rHU95WheAepS z*JI#EFv}!rVqY)Qt9CMLt+R$g;K){)N`OaJi<}l2t(s&SYn7VC+N-cfsq(aGsPed? zD^nwTa65l{+%Dw@Za*<@m+la^Q$^aww_7Qusxu5ck*FS!cAB`IrQ&vbJio!~7qSz) zj7i%bR3LgQz=x{AX$s7=bVdX6Vm%*(c^rj#gy}3k`Z&nWIaT=_$q1vJ##Kzvbm%5-$WWseIt`)W85rt_nItuDHTxcF-U==n)aEUw2AQ`ckq@+*o(`O~_Gnbs0J1boLTM zjlFJ|y-jTo3Vjh}T1m z(t{YK*A(uRrK(GQK6w+2Jeyk)-7XdC?Q4EW@%}59szk+Xv{)ucxUbjB%67#MQS1wj zNW_(x!l)8xQ8|mcSvkpCA2PYrhoBSc^z=Zo6q#`&KysbF3MDzL1`mQXfkLbAp&(hD zB7uS!mOw$Lxh&>ooyS{@{Egp_p(yL|d|bFpDyV8PB0}=x6t&^vj4GUK!W5)24ReR2 z6QZ!va%ItF9)Rv@Y3}WTll`dNc}mNGZ2>1nW*D#)E3y?QvK4Bw6>73mEZJ$3L6ZZr zYZdVq_i^XT$glN4dNPI*RENkWZJ zo`>^Qbh|gpw=W|k-n)~SahXjM1$A<`1b@8_yWhnW2yV)lE81_p=*28ad*hz16T1_p=*28afR z;9{dg+<7rq!k3L-E_{ht>QlsI7ex;u_8?*pBK9C+4u z)*uQF2SaNRp%I0X8c`1W87A+Z!iWNcj3}T8>)kV;gDvKKyw!k@D{V$i=OeWM literal 0 HcmV?d00001 diff --git a/img/core.png b/img/core.png new file mode 100644 index 0000000000000000000000000000000000000000..265c97e431b8b2c1a3028c53d1a2b3e2e01476fc GIT binary patch literal 82147 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

ojmx->Vm zlLLKKYGk^VR-y7ZN ziNQh`WY3%V({Aripu5RjQ^>h|8wT^0z?UW{2SpUdv#0j#a38Cgt2>5q12_h9 z$;S|+mXS4+b6X38WuG~?uZt>zKu4Ow84$ZDrC8oMPn%8FHH)=i4VWrS$Yn?TD>zOpKFKj(^QwUsE_Il4RzV~vqFu4s7^@k&o0tDYWW zZyq!|z$7~gY&bC>_EC4g=;1RI)9$^%CKy?o+}VU%=ekUMAmJru9FJWcr~Wa4La93S zR80px8c(+Eqz)iHD;!aOw#JQ*hu{B|<(Ixx@$Pf&kPwMzC!UHM=!-{WL?(wo2Wu(ET9QVfa0-A*{?=5}Yw1d?2TFsU)}8Yuf} zj`(n3Z+$)%D5g}(KZb%PPUBl2p4lDNxaYPxoC}9?W~unDxn>K!=$pP&^@_@hF;t@Mj zYZxSJdyP!BpZ`(PAlRx7ElN<_IBGr559c{o{L*IG5;?T%&zYZwN18U3(wNkYQbE|E z!XS(F@9nP?Gbb$QSxshQD-~UF>$8@vq|_g=x&*G!vJ}<2Qj#@Ry^yy@Z`YZ521#oT zPm;Lu$`c)vGV=pJk`>{0^tcUWR4Kk`x|J|eD?GX}$`qK-j@%CVmeTkfW=#Wne#wlH zr*Me#Hnf`eU)gPyaRc1HTd}29xM>DHb7Lwzk$xy8Ypwj+p53didW3!5rm;x{nYt<<@*8we9rM&+e}Iq^Kii~Sa`sZsHG+Bhbb*b zO|M2+%lX=LVFgpMOZuL7FTkDk@;3kW*usS6O*IQ|K{rb2O+v3nyMI=iDM*9eBcagA>Xb97rH;fJK*XkR<;*&pTjN_c%OtMGfZ3KepK(; zH#7*VI+UWEN-=WBNua(n%2YhAia&67fZ`;TZX-i}by@!z5uV&t4Axn1D?23>Shd$Y z%$J3QF{<>4+rD5rU)S|AWAVPL^K9Ku#c|n&%cA=5<+ACO26^1< z82{8%_ZesTX$ofgZXHu;iTV^JY80cjVU9 z6EU*)Py%u0+5mcvUkCS_(Xw!zJ54pJDOIiOCx9$`)y865?KQzp^4)%IIFqXyG4dZV z^=OJ_a~f>`xen?qNUru(rbolLJlGsz%6}F#0v=Xo!pJi)L^D$u8C9x^tG2V9+E?j_ z4*C=H3t&7O_!ePW&H5&j9dQw#Fmfd_B5n#@+CW$=T&Kr}IjR@fpS+UY9L}la7}kjs z*-C`UWG;ouVJMYCNip#AN3vMwPXBj`!qxr=H_ciOb6@KIpDHOh)3tmpg7P4&9zUmB zS)R}ai?|~tP0pLt-lparqL{Dc)-OC)`WmV|!^%c|l;zVs#VNxToDf?mi?Wdvm~-N> zl*xsB7fzRRk;a=vzW>Rf+jZ_qopvnzkYTyi%m0*%+NEF`TEav-e53k*uMd={5Sx2- zKIGp0l{*Vd^KsZba$o!v#r;)`3M1D(@;Yo@NB5aZ*`EsH-5)W~bJ?eCiM{oGf6K8w z%y7P*@qbx7^lILgp{Oy9DRR9|^;scd)&Dl|E7$^DR}Vr<)LkR0V9EZg0=ayoze{)< z%oyBO1@vqdvk7j|_LqFH;s*t6ii~8^RkthqpE(4V!rNvqnXP5NxpSAE7|dTtbjZ`* z`Oi{5%u2Hpa8TYY1;$*P82SBhzdvaCOA2->STV5oOQ7$a+8$r#b!-sMwS2dX(R*Fb zDNRXRxGVU7PwDs4{$JmvClLPSPl*mLsGDwSbcO^XE&ozk)kDa?3{HIWJK=Ua-xIFi z7itZoh%CFaOCR`l9;rZIG+Eu$tY*r)$IhnAs~8-xv)S*!ia7Z5Z4ximX?}$5aGn4m zm8BN_m*-Do-&O^7SQBFJ;0X?19#-}49G)mKxTEaRDKNZu_kSCtzWXl@n381nMzY)) z@Y`eTWPbfG4%a%y-M5nNl#-$|=?FxwByO z{IIH1Oo~Uw-696P9lVcSb~kN&HU8JT6XPRpLwJOlV=;AUSe|BKB{H}<#yc3=b}7L* zMvEMi)b1B@&{hWR(;7iNFc%@MqC;J7$&5AY6VK8bEc|3)tQG$2iPyRx|5oUQxHs4~ zrNiDwOU%-|FskjGo0qrE8|>D~UAe0B+e8xM-Q!_9o%XM)b6ntZjx*(YrQ6*A%Rt^# z>C)kEnfq2rb^2}Nn0Dxa?b)gpTfHiUgPQf)UN}=UR)uLkx9aPI;#raJ4DdKi^gTQ& z@6G9$-Q^eqfSjwl{FEN9{9a;5E<(EH)xFRWq6PDfz*ANcqtCt?c4orR9LtUC* zQ0dmKY#&InRF`_` zG6*Vd-x1X1E1AUaXOWV8+mmy9PDfS}(7kV8-Yn+0@=XYqMn%+ADGNgsTE$u~@Lusv z8>;YOnW0%pKQZ}2MzX_1os7)tRY{H{$an)Jf4HQ$(<;1iD~pZM0Z>=kOHzB;$${eR zm>BjZMDO#*=$8H~7$?u@nOs<{lIHIP4sb0zzyD?81^@yWKWvyDiMjQO<@1v@1Q>DO z)r}`FVdfL*A>F_D6rXFzjC()51Evpr-Y^KhAguk5v-|7QD;yZ4bx7p?vd{my`vpuz zK3o2T|2vp(9viI!!>vz%$e*bBKldPgMuK^?)8thEaAAk->>cBtjsc2_)$WTOCeHr% z1tdG~iJkUCD_2F6n_@+$oA~yZmQP7InN3HjL0tV|*D4deE6J0^3>Q6GWVvjp6bBso~;79cWx$QjO@ z+bYdoXtCKBS1IQbclMdexcPPD==(HYHRnTaxnAdU4g&%7o|YKoyy&x@DO zOsDYiD$~&)w%PJ`^uz+yo>Ji*VDJ$KA!5!*FLkc+KlcjFys=&MiwGs_oJQX(qoklR z1s1O9sb6=2rQ$2=iRaIU??)`F9xZdse_0m&z9*hl)^M~cr*e@#5$mwZ?QGd{pOP-1 z-uSY_u5M>)gn&|UB;7O%lEZ9kE(EMQfyCL(9ZON5Y(~;baO|PbfJNL7mKi}uj4bx+ zhrQS-eohf>@QWNa`HI`P54LBT+uOZ;&1)6Ac7Q2;G(ercpdeepwqs}kts_=I_vk8{ zJAc=z@EqjL7?bT~xLQ3}Mp*iAV`I81HV>0VQ?=k~zZ_Lfv#LKPeEki)VPM@;%qAmI zVPjrW}+hg&Cb03XU7w?sCTsKNs3%_`O)$VW^cf`3&d^S(ZNt&Kg-MMJT{l{BZ zw~;2bdcAr!ydY{!ZzrTML0EmOv&j9DWP5T1hhZ*JRxvLy>B2KNik|TsYe%ZjJn%|m z$^jIlo>m=63q8%m#sKKDDY^2quv`VL^n^)malZzRbuLU`tS=P0;N#%*(jG*GdfJIY zPS>01lqUTA@-c*q<$kRuIT@$rvO>gma8RGmkj~EU)mb~NfBjvrl`vF46b?XhxQbw< z4sw@aaJwX0o_#(&HavayRm&~)~j!}lg`g~6&KbZ&Hfxz$O_^Q@>Tl13g5YIZ!*-H6gi&|u?yBr27T(a<0IsNB}BK;tZ9CkA&M=^d6peaVgl!y8KTci0_FVJqFV#cI08 z2S)_mbj(*p)yIV44M7=-L33ld)lG&+-@l9lNDZaS)v5NlA(z?W=aODx`9X*lUNf$< zu3|rA=Uh~F`lj>I`z|%Sfa8TqrC@x)|d4u2hZpQwC>@V-;Sq2<$1*C`R$QjPoX z08E_UhjAaCduCqcxXx*$Z`Uu*D{-GUC2&+{3`+G1R3Hzpak@i4QUcWH>zR0m-Lsts z+4lANt}ehM$`(GS%ZA-&)(N1V&bYI5T;5%F;0PyrbVGCFR(*WvL~NKNtK3S-2M69O z4Q<}5X<+thyVlIfFLR*ZG0$aqz3u7e+%z-=JegH=7orD^qYxp7U`8P?3*Bt&1p8#l{VR3mNBCD?<~W~RL2wkDGje=F}rlRRLA>3asE+xWcw!RwA19b`FFFpt)RO+r@+pt!(60dGnVi zI#){(D1{4GxLgb4fHb*iqQedTY#s6^A z8!xl`ss)QOCwEZWqNp>sAth^*)l~51Vtm0-cjf8}&65ZHdp1_a%g)=D;&Jy4Z6!Be zf3{tqcM~Lc8%~WR0w@%vsnv&Tx+^%5gfm>AV|-d;e3Gm~D}1 zz$kCMRvzU?qClmCh@Hz8t%1i0NE3ayrl(&F?TTGh^i7YWA2^uI%^hbuPwlt20#B>7 z4$%!|n^JI~3mrWsEbCKq_34UvBoLNW4+;J@s>a@@;2uG>;^hxY<3%wdD#WB;e3r!Q zc|+Pc$i>2ztUSuA1y1OcoD*-NZto}01{!Lye_^!8k7{kMNfd|0?pB$yvDarAY*ezy zr0h{~JMUQl$JVw4CoA;}9?bEi-k$?0Di`4;HdIQS%-S?u{xCk!9CNTivyrU1KWjSK zGn87z&ry4YJ;&g5BtJL0bClG7a(So<*mtEU8ijcj1;CraimAkHti(4#vn%*PISp+y z!vOM;L%Na;GUZZ3`r2Q`TG9bIHr>wXiAT(p7hQG6->;?v0EzQI?a=JO8nS~N2i0*> z&aK}MV#b&<=%Gwnr0^of)st7xR^DKwCAo`b5;yGnlG4W9mY37WnF+n zX2lk_B5+qe=P*GD{+u84FH~MARWP^Yb1BnfFl+W=2UJjw>b;9jLMZd+aVG7_Mb;3NekIq>f z<@0|~69?a>N-M2d$GPF4X)}cEZX&E%p!;*Y?HKnqY&?aq~8!^<`*KNER*3OzLH>e8)#tvIOJFYHu zPgPFf<<5}Lx^QoE`&FAOz9XN9*Rtq3JeqHfrX`xjZruF-2dHY-a*Dxrgk?S5A#R-~ zhhNgpgQEo>c^SABv{Na?)gVO$c~H?iiKEF`P1Bn|GibC^rY}k6)}l6Lr9$I{w)u1Z zl@0XiRT}Avpt0Z4a-luI+*BS6j>DI?ZAWg;{QL%21jt(N&OOVHiZ~|CtReU_pqcp)y)0bn>)s zY;_cokfyzFioZGiw3D5tfA#R@(QP1RAv*Gn|C3G@aiD>qS)Z6dTUUElb$^|7(nm-DAZjCD`N9Y`?dd)R#R~(y|9o~wcv=h2(;7R!GGkz(vX{UoRq7tRJUYusPXLi@nbYJ=Lbca$A=YcQw{V47Sdf4{d-hn)%e@9 zrIV3AWf50!CC+g>za|#HZ_7qL*wlyEl;d)K)c*qAcRJPk%H^=w@g%TIQ>iGCtMIG- z3uLCB-(d<3{Q8lEFh6m;eKmLG=P!YGDo62axb3zJ{Ugt|tXOcr`DZtex6n$1m6wbj z)R?bCsqO~N08nYcQ+c_ZgbquR0xyP`n{p2XtdjD7#mqTyd%^Ek`E-^c^;Y~6?r{>P zlf3XdVF4?=Q*`wzf7Eu6yt-fBUp~HP&k{4&em{ueipRk5%^S0n8j7!)(XRdaR0+m? zp0iqg%i4@!pEm#SVxg+4xF(^T^h$T+Law?TfyG2EijEa~e{*jRc>V6ZL~C$${JEZm z>`K&=A=d?P-v~nOL$LbRiMBihpy}Qs@i_l*2jQ5zqv938khJSGfT2tXOVFvpz0TJs z{KD;f4P~AymMc%Xi-z{`lhN!fmj5p1g@7#Jm-Mx)LnNU+^)Jqr<9-h6FiI}Ta%3}EtDW`E7`d;4i0Cy9^&c$6h z8JH&qgoTm;k5P@ZiGQ-m<$IatV?2bNr!jCK&h)6ivrsJms^+e?OC+1}70BZbosIL@ zpFUf(D15XoAJ?Fh77O3-#o@WTG=ncn2NM=hL9uGd`t%Ckx8C5`9Et_~*}asV{@lxr zNr&QRX?dP%P1>|%y7v5|fP?UY7pruN2m7(0q!fYw141XRKvQSe#i64k{Fe$ZS z;3&EU)M4h3Ho!Hy{P?4?@n=`F*6HflmaKjdSM9K&T&-SgAOLZHVN1xyY234O&xQXdPtrxg^nc`deg>-uIJy@Om$W)UL9+;|xp z9|8P^*l9)Ft`=TLi{4~I?+_m06pl)Rdu9;%SB`V-cFjTdyy+#Os*?^}wg`5aLFxs$ zu!GPtW2c|q<7^E^^^v~{lXNond4mF-=#tkRsp}amxrcRTD#jUjy zx6zUNpx_z!t@z-yn0#PUzhWJ(cMNz2>WlPVgiE(}Z91(Wp;4bRNecve-WbEq$-=!S zo?sZ*Spcw^vL8CF)?_&fP%AAF!}g0ZFR%5tq`}ZmhffY?gnSg@njah=U9WI{jaerZC|}(x<-vt zc9u+|EMG^O){z;v*B|8Qlm)dP$}6N?$th>Rs5TVfnyHbiEy@Vtw9=x;EzLLi4(I@d zALctAu=DfXsC)uAL3PA~?+6lJhnwU&bHy~&N6hsStChs3&@N_H|J2{b7HgU0GV4!) z&JRXTjtQK%%fn1~FLNh3>gE`rLEEM~{oYmg`+L6$nliagn~dbGpq!|LVe$0UFl=!; zF0pXD(h#m7YlmrRp-@7di)0iXaI|U`ZA85RZdWtSFz`fJ#fy+UE~zy)_0p--se!xY z49dB6_VCs6M_*|$)9LfZBC-35ZEk5r)o2s+~QLdbmU{z8z`jYnZY&JUuW?j(8Q7n8o9^ZuHd1u1Ph< zPi87;l)L6Iy(+WSRnZ|^Zw{iSh8zk^Bbs*%m(%|I;^~|NQoe?%kbU(_cnTK`}spqluWjJqnHgV_` zo(>H@;hJKrOmZOAXDsAfiUhEomeEK+D~Ua!U1jCIA8$5BIavjpO3AdVch&Z=**HM6 zCb=n4H(1mCG}pB|)t?CB9ASEx!+1WnhdgeofFV+|W|Nde4BDaY-G-gy5Gb-XC>*TD zy%3BTao%x1ndGlN$#;@6By8(?@xqE_eR6$>18~$w60};Dh{Ue>IvQ;Me#z1&B*-00 zLR-3LU^>GCm+ZK^ANgFwyx6>Zh~&_yr{37=r^DjFYal&8Mo*qfef{V4md3Ntqteoq zE;~we8;pgsrcAFY2Ko<0pwdL=bqPw-&Q7i{%!V8@RV&X#Zial6m6zYW)MFKt7YRis zV8@&8sRu9S4sq5R+b*~%H4XbVFL)c~IRpB^)gMo+ma=v?T;?YD0*HoY0@bxnpuZ5$ znZqVC?KKGrBim-%9(PWc8+;dDIFCYBW@*BDyuN?#@v1uah$3%ws2iW-TrIh&t7h8Y zR=rfn9HMUeTvZnsJYBOST%@|#*X_3;9V^AUt1;wYzXZ_SlRmoy%GJG<<|=;662!X@ z-KAFoACeT`QTU?e(2AFca8qKrl6W2Jm&Wz#CSwudOHMA+AV>ts#^LF2g3IcbE1$U= z1gS%@8RsJ3xlQsu_YTNXd`zowH7~w@$s~5HCh2T|- zDTWWPBV;NOcRGgZrw_K>bP3B4KtB3 z;my-Y5(Q^>s~0XUK6R}8Gn;JrgBuBwjJRt1+-hvf>lr^oFnkJV$mPfY4GL-zYf+?g z)qV;vQaY>IWG1c_Pi}D|3WtKlkvZXG0z}1RU$5r}%NyI5o}b$mdb*ZM7>@gDZ2t?Z?=%M~V>&GR07 z-m6S|)lZUb@mG_k*e?5PYPTcC0043nTX(x3sFPrknfGkY z2bn|_bUzkdTSyEM7TkD5)`@UQOWiy0SSWq35BP!=;SsA3X1`ha+W8;@p^V_^SVaN6 zd5|m*c90#nxiU1e`H}_jLhUW?figpx4B&9o?XqKA8$`@e@v5rEsjs9t3fYi z44~Sb@J$-`oXfPi>A}!dhm~fk_?Z{~=w+oUNEkTUMaOv+n43Y-A2WKIy8fnE2blbj z&5h)1uh#b2aftV}X`m~Zug2&V>;$^F&#Qx-){;@8%-t$e|CS^suD#|GoInvhijLK<5QmO`ipVrQi#2p1pURk!$uCt!1NV#BD?85{#+G#-6)9Z zvVl$A1NW@XUwlc44n<|s=tlX_pg=l=V!uQu@dqR4rOy-A8QcwfvsZ^1xEnIms37W` zj~5-Jjk^u{VmR5p=F6kUa9SK50tYk1p&PpmI&C9y#7A$QuJdjim2|1dS4asv(;`Z} zV|1{p8qA8S=pOWSZNw1sXl^7w7q3u|saG;YS3SX-$g6<}yBVVxbbIDJU0~x$O-Xri zz?Qm)VFOM3W=!yjcF6XSdw!~EPIg=Er3D?VARo*pYd(TW3+*Gt4b?`V7p{(4RJ**DnolG(14?TbZMK<$&E2YnRln5Q4SmZeHNc5ym7F@yHcL4ks7;nSNYE-`(@+8nR;8 zf*U66;AlXXJhd|Y#{J9n8(^=F>Lv5184q0}NEWB1qrobqfeJB*;APM{$>0`{0M|@rt#j4`n2y0C3b}HYI%R3@sBs^8N_+NI z0LO;Myk>}|sjcH`P*HhskB;jj;_|2_n}fz_j7cU{(@`H5=G5iTc0;HSpWX|jgQ;w`^QvsZrjd_-4TQ%aeQ1m* zu%u39%1G5}e4VIevaDfB1AXdh{QTDe)8cRvANZ9o@V%%d^IKx^;j9uB2o9}gN(Bn} zh>U5WC&sfUIt9t33m*qO)v60w^`_QXaFHvX+ew0|FUAN`{n4lf4T&m*Fh|xCgU1;doKUg?5^hOsz)C0EP+{8_GG|W6v2FOPR&CqvmpO z+4=oeDjIuX=5CqY7>smf?MDfSYO|s>oTT{Sox%>HiV=qGJn+4bJ5Rd3M)1ZZ86NWB zZ~n@X-?zcG`hwQ#*x*Ga!zs;r-C%c_^2IMmm&-Bi<}_u}o~%)Y-qy%)hBI}@7rNbP zgmLWkR55wlzn+&i)pL91Q=tH1=g_;&xnnW+2^7oA6<2T-0W%d`N+t0LytWxY+@ip| z^z?5UmS1I1%(apiQomY=&W;8g8ZE}3yNvM}@o?tTVC!!1x=VV(=vl0gXjM5Lcb!jr zFOHIGjCMriQ|BAsMugA2r&Ytt$oCmzUZyaxogVUSsw_M_+1zmS5R=$yGq3D$h|1aW z*V&Kj=nkl1=k5ZV^e3MP1iVL${S^@rW!gFGHVewXDq&wu=38tsXpl3fjm5VhiSdVu z@6T7*bWc}KNlF;&xUBj1YF3&^0Vo)(2!|x~^(h06PlE?1nUZ{9tbn)Q+Ys%Kjb|Ii zmor)4PRrYn;KG6mdRKT7{7P%dv2LqPSQ5}Q%`9ir)ycxU)2N4EE`D6e5|C=mVEQsC zZV&CirnpCRq{`8)iV|}T#j4QuuzDi5CpvVWOxAfk9=RzC#aB^Fc0Q@b^8GJ4E$Jve zHLKVC7yD%I8+@geTPVowJm9gTdfD7BStL$t`f38mYTS{SX_ukm8*i5UU&zRC0kI=Q z-T0bSa7%53iBA_l!em`SBV!S~rgVvjCW~Yo;KuU0ubA6O@w)*o`OUw57q@_mUIy1?CpRt=}UmPz6xv)I5nniq3$FXd% z^U+hS##r2Zl-pBH-HNF9q%uo8s!P=y{3SJN9*SbsCo|2YL2cD%3CE~#F`n&SyRH4D zGwZs=f>;@`5a>Fme3UYv0lIf2B}g2ym{Cch(7B_wLUmH1ZZ47GvcHrKXVo|GEkhNw zkoZbF(13i09lw$}PjY$)p?hGBu7XcSdXHg^9gSw^H`(&Y})pw*X7>mE0Ze|A{U7Lyybbh0)`B zblMZe;gzPr-e6i!n(b=LlQLu*Ys6-5@}@}p3?K01XZEU(2g3G7qxq_nj>+WYo6;FK ziykd?%S!pJgGT_oq+SzwrA);9N_4Cf2`?SBF7lnB&IA@ujFWuimNKQ!mC{rWqfhOj z8|U@aj{^)OBeIdM6EG}z-85X+Bf@TV^hLj-Ry8iMho zT#@N4IF^S>qSH3SBJwhV3p|L~?8Ti6@!4b%*NvbhlG??2QUR!_XJ;i<6G|)_OrG#C z#lvovS;$cs&A4bwhy~WjJ^C`iY1H3{}nXBA$0JiZl+x&iGS_f8i(jT&rp{R?ZzG z3wKZb0~&VRN8~$r<0EE(0S?pVCH5UXA=XCePtlR5{})aZ=_@|3W1sqzKkot%(~(NQ zuB89t!Dg_b%^v+*J9IMw=B7-HX7u=^2nz|qBg2QWZ>J3fxUfJ7R?-S41{p9O8C9ZB z#g|HQN|w?=jFT8_X|>43JW{K^tnJv!)zwS?N-PJSxioi5;ohFazV-HM_SNP> z^4*gQmj+HqVEg*`l(?SSD&amm%g3Qg1e$pH$~S*LO)O$wOxupq=}cm+4$LeaM?Yq` ziUggfMR&F1PSHf7CJyviHj<5kUroAH;8sK#O$p{ZnbDci6;}lOFPhsK>!$qjaySi& zI;eLsv9hy+JQ7LHc0x*Hp~#zr!P+GQ13`+;!Wj>Gi;_X#98sup9IN@!NHZy?X^xG(PY7#{CMEk9KHWV87kD4daGbjgQJ6LS zzYnng15m+SOSg~09oO>V0}Y>-uVmw&c7wmEPH;5L8Thb!rgOOKc^UM?W&}KRez$V) zk`2KdXx>brZqjiaN)sYd@VuFh1=7(gNcc)U{OCrP>7C$Rq_WIKy~G~bj}_JLcCj$W zzB4G%)A;a9p9_Iq@m@t#{3B%neIFo#sF1-EFaNLduWytL8TluB!V~#n0o!Z={TL&I zJpp8u#1Z&ry1b?^y9ixyM|Ci%;){i-r(@w{uh8U$x_obJqlo&4zI6rUbs15`K$knS z42E1gP|%w3UB-GkCCn4$S}*bcQ%5~&VFX?>3x4UQyDm==roD0zBt&-%!%_ik&726F z@$b64oNEV~OL+PZLja3eEMR`WW2%41@}EZHiHIW1)F~{td)+a0PS?!%*)NG-?z+6( zYX?dx%yVb7cJ*rq%6iCr_x&Am*K<{5-~U@gdBgYTo4pnrl9DxlcTsa;bIs`tLBC_% z_LX2_*P?Qx-i=BWu4A14KetHq#UasQ?PAvmtgGWuRY$1ty@jZCq$Q`kV#-drU_`FEMzLdC}jjcU6+bd2z=C6d0s&Q^UFK^uQg7D(P}q z3sJt4ORIPUb!+PDKbDGOS#BE}VDZrC-XQ&)MOb7yKbbLO&Q_s*y~cF|$p1u!knUQo ztz3Cs{!jJwX66Qzd^xu}_eB1~Vn#GG7A@@EMu^BS5v~dIJ=br8cp1q+a*pT?JZ^g( zXVQKgDmfrhPuooARGQN+`(Fd%cAk5IQF1}ZBnom667sv~&$&iFzGG~_9lYki9A;=W zfc>s6NnfLX=-beruA9GwkD4$T4R5#m+!@V@64rUQ&-{~_;5YU>L~)<34>18<#5Bps zC`B!oKkcG#paYGEu&`T@SBUZc2pSB4sfL~~VK(B;l`1+Jg-m_@gvp^;33-!Y1tCK* zMxFHEi5iUCw)Nykc+!^l{qh@$v>zZnHHAXZ$VLKV`RC-wpcJApA%8;A5`LJdfBUWw z(o@C!v6NVWIJrEFf+7)ShV?&s?~#Aq?vnTYt^UoGb~}&M&%!ywgp(=0sTvk^M}Io+ zT&{HzNFrTx8~wfXXco$$=g{~4rAl);3y`Al zZvXc9k0~L}x{md8EM--1u2>5bpS{Kw%36{_$f3BEsrfqZNJQ(poi8z}N4qSgzm({w zus^Rvf#s^OZBTrZ{rKhTZuL^N52AaN>25<8XlcB~J4lkoBTVXQBx{)52VPaZDUbDDc81-=Vk(6uWdzPKi_ z7s3*6xpv7&36v)d62iogPD5}c>94uyG2xX6O67_RP3$1heP`L8hNoe2%Ij=DV7Qs5tr6OwD zSJ@Hd1FS?U`ZHY*8IQrv@=4=MM^d_PND)gt?RO(zCtBE+C0f8S6W#F#p}4T+b7Hdo zTX1pfT@tU&!YTn=&s|TkbnPi-{R#hU&tFC$colwnnY@n;F7~hX!rSeC2v6ebyy7RF zlb0?)hRo{l6Z#f9PX%&LO?}fycpBjkOT2yA3U2lLkCg4g9;u8pRGY(zqk8zjv`j`0 zc^x0CPHAeqmA{PnAGqlv_?BO)dxe@v_M}+kgkFY68`x$yr@y~5O^g5p#x?B>t+iGQmKR5pG3c{Ut_HN5!$s&vU?2P)SVkFH9cKs zJB#erKzI@@cF#1tGt8-&Rb5U=^N2As%1i zW|4xw@Xc?1Q=GbPxTz!6lT1q^$~z1cL%leE@LyjrwX}4eZKPmfK1X8#F-?U~2Rt`k zxpsBy$jw9}4R2#fbb?Q0E+6FKrs@v(l-rHA-#K*6(=hmJ&Kf)YbNi9QW2)Sv0guQG+s4Y}P z0`_i_c5;|XxtP#^1YsOzoUcMTpGQLmC{mv90S8hr=e#oh3A%1Rk9N*WdJeKG`k|E2 zc-)*nn(+rk(HQV4X$sF0Ld|4gF{qON;hhnXJbt{6z~4=9t+W@Dll7#cpvAm{FB=43 z%KG%Cqkw8tZii!0)?C;+PzgEzF~5I8R0Ds$VpcAQO>3C}2f=p=-k}`He`)<9fti^Y zjQ8mn{}hFoJ^^M8)03fZ`#9@0W-Jafg5#)TaERSv0{P4%`i?`@_Z}5(+qPL$ccEC& z!HfX$IbuFk0KF|_f{5D0`x*+wuwFR?z5$%8>uO-BaBCWkzE%ay?3o40*pCEl!y3jz z%s`o(ZbO<{CC}4^;XJxgRL*_g2a+%mJvO=4{oi$~M<4VZXbzUEVMPb|f3chP)r)L1 z%bt*^F<8+83cp2O!Yed<{lYpC1(>%L$RJ$54q@u5VId5mO-wg7EFPl@=?ru(se}1= zxq_D8GY}u~gyjRl|AV@>4ytSE+6RL}2oOBMgS$H%oL~Why95pH?(Xg$+}$05dw}5X z?(TC4xw-ed@B95`s;1_TsXCR~)XC}Hy?XWPwVvncz1cu6krOI&b%3VStbnL9In@cO z_?;n3zkT;Vj>trR$A}!Ex7>)NR>zKg{ot@QFPq~tE^B*Qosx>x`Nc6gw;=jcr&+=5 zcgJ5|P@w@lp*@33@XIoIv}+K)=PVl3;~9cM=RQX%slJoyqX=nAxooig);$Y$+o2ry zZbmuT`vzat`vu?nMekJLuUYrdP+*7?{n|3=NrB50@`UVV!|*Wo=o0i;!C!$TKDkJU zdlZ&DG^m_X+_22=Z&I#bhICSIk$menzX+N`;95^5aPX@~#Qg3uuEhKiHoxOyEKhoD zNlA=Y>rcR0PJ@iLu-W6c35~f#JvHN*3?D2w@C+fWvDsjTR0sC8xRY+_Ury~o`F8m& zIjkoS>aT8{s(lmwb?jirJRbNso<~bV9EbSf=(m=uZ@))a(d00=vib4*{JMS4^Ft%Z zcywc49Pbk)Z3#nfJvee*_aY7cCHY(BldV%e?K74x#UEqN zQvApWcG*tt93RH=4y}u)cKdJIZD*;8EKTk!UN1eCtABm;aAmUx%F>4?v^iReZ^a8` zu?AP-MVaCG*-xZ{7MXM^gSZQyZac|+Y9H?daCax{{64*}yqMk;SJpyJrm!fp3BDrZBUIA2e$awB&zU7`GR zSt-%1ANV*J_sBzm=4(WP$t^R-xJO2`qXkCyYu^PP)#BugMB6qgIf;jBUo+j6V5fOc zPs4LhkL#sc05T^=El5#OGLGH4-ru-sz?ep~ID)*D2BcvtK1?RJn}$(PHZznyRqkZz z4~m)r5NsU=nWXvpVMex`7TzjdPIq0_ITT`$oK*f8ZRsvCl0N_&@k-T;YlTDn80suF zw_)O>mZZ;W9P${~*OOk@r>inqodT=0cU<3bNnfAH8J8kvMFhXd{;aeIZ^}$)z~sOO zjQe+Nlx%)e2{vJ}Ogfflyt#H5%hMO7UNmIK={q37dY|y?v2wlaAk?Bpp-A>Go=f`x z`k&J3ML~n13&VkA)Zzj;l_{l*R8B%WP1m_gzp7UKwgge~7MUdzBblTdBQx$Sp7DEu0~zEF+v{{_>e*!zFt9GBP7*f&K*`)Jx`>v^iPl@wwLh0Og628`wz$ z4(Ho;iz@^I*f+9rM{Ij} zW9DW-fYT4R&`|o-NWoq#LGMkFf(5_q$ zQ#*aqm)3M>-tw$eBI{n6Ur}ysy0zWH@B{c6Vdo&uc~_brS$m#{m8X(5ddo3fJP1q& z+W)HZ!Yx3y`uZ43D*Yi}ponlx(2iTRNK_jZvr)^vS**n-*usn43%T8S?e3^&DSOgn z0sXxtatl2cf#^rpRbqAsbSiprF2F$?~#D6qqyy``1nM=ZI^#i$b_J>$18M&={QS^!lUlIjB{ zgT?XELCw5V(yV}jlHSDY@1qda+c4NiRz!MtJ zl?Yk^&-%4U8Oh7%Yn@0_6{{jSq)(-f-|9_>+7MT{T7`^vQ>QG}ij82J4gc{cGRn1piQ05_Xb|042j*7!v#70Vr zq0u(uGx)na+6iCM>v{rBxcAVL_PkxW2k24bHlM#u!0Atzv)cngfbvi*4buffj=PFU zdDf5dC}_UwTU{km=K)=#G{J}f3s5Ve9(=VTV}7qtsSlHbjA?OCQ@KP!e!xuzIgnnH zU`RTL1^!Ykx2d|MAkwBU<;TZ(qk?nCIDw;j;OK%V&?r{hthY0?onVXGb(%zTQlnPr z-`fmd+T7o62~ErzI?`%$#+s;nvpbLyp+gc(5N{zR)kCAM6F~RpiaQ`;LZ8aD+n(80 zBH*so%F_O;=+=p7+yCxgnu>9A%@U>2vHBX|q@}2Fbd%sZd1uu;YQg7pKqF>ix%5E7 z&SJ|WRBrWbApd-VGfjq z2AIhF;6+*Za(o)o3(=)3!_G%k(FVTxsZtD-slR~GrxFais6?5m1im@sZhO0jyg5@E z?5Tyfk{fYM5VaO=J!lwM3N(dz&b4K=;s$=a*t}dgwMBp$c7+GdOa;6fR%QIJsQr8p z5PiGVUcA6M_zfNEFm;Vbi=uM41kL!b**^lKnLG%KtM)Q(kgdwf&wc{%<-bDjn+w_nhSMy zYE?MyQHR%}zU8#q&`Iz_BB>0Si2e(;GzW_Cl+~uCaA^7!P|PZdLeJnu(|s3aaF7Ui z#IP5ljF)0l3wd-RyE?SlYsKA5JDn95#~KvWpK>Tw*1}1do3QN;^mmIrdpeocS73`0 zr&TK&DTaxjY7{H=jk%hnI6=@MQM@6fPBo1aDRRt_XIklsWssxme=cy4kl$gZuma0T zWXy<{1NR<%=v)TAH^b{{cexO?xSS z)b!}$>rf_8rw4Zvv&793^W=9v*6mcSyM&ms(~4h64t%uI?9+Xa2Wmr=afPGV=6s$L zs1e|L9d}PLt==ct;mtYrc=ufmRP3kID3g>=Si?qF__ar;t&w8brPq={O669q7+~mF zGkfZV+7Gdc4K}HZtiY!;F&Ce5Gb_~FEDNM9IIwWhe`~1?`%6k_jk!6XQU54%$4<3) z>UwS4`tcK+S!)$P!oh26q;7Ju?CUONrTd%l1Ef}F%3lS1FC-9nsrc~v=P$qt?+D!S z^2tL~RCI6&3w2m2OU+|Ad{_;^Kw>4itpdq~Za8jo@&F-UXOeO#(I#rXu~&`ht9X4xNzbHNj^Uk*A#bm!!?G|Nq#6|+?2{&ZPTnom<0YS-W{%Q>mn<(kxE<_ft`^tD1#`m7&Sz=RagA8$NV!2a0)4DWBw$R+%lSB5i0j z%R3RAiS%`U$vPsjJUYRw+nt*zb4-^Lc{<}8XZx}EHojKKZE_a9Vg97QK!LeC{g>{{ zCXY*t;Ebhhqhvxx<2pK%X|eC;+UJ{25THV=MyUH*e!pORC6rl7jp~cfjXE(V_Y=Ex zslFlgsNwLhbNe0%c(fwiWJBPuXJ4SCwsRO+Q%5D7v$);0GmWKUs*#Dpr+X$;v|yuY zRWDbOdVnncuwhX3j&9gZP*kV7Y}T#`l(plWhS66|p2sp*!vdZTZ69UxGf-4?K^RvIi{lzA zkqfkxW9N?KLju(J33U4>O!n-D^miXhBSX??tP(Fi%@SpGzdVa0UIbK%3r=79>?`bV z+*C&M{I<+MF~2{Kka>&<;PYFURP7zoCu}xBXBij!^t9iMV2(1Ca&%`CgCdeeh_CGt zf+SYahJ(eZvr^v{P|on(BH-de)GFYQtEtTS|l7I;XqlYqrp#hl2@NbS|{(PY73RE zZj;aMthidoi+31uCF4l;ZJK#ih1>T#d)nbXwB~{52zT%5@fuqiL#GW<@`*@MTUxmU zQdd2s*hBX=Cs;f!1Z?kd&896L8@>tUdqv0tN*JyMew{|v1<<3?!6OAJhukic&8x)u`k4+boTuS!8SV_&9U`|`F;!hfDaQTSZjX=O^KW@TMM&D7 z#3A{PMV^j0rCpAKd^UF#Fn;hv=pbp{M~ZMi7+1DtX$=0vAz^p5sExB@!I)JpcOb`I zYT~ZOar*fZOgLjK0~5|83>u+2 zQs*lw?0xIgg+O_Q;(U;LbBh|EGzR{zH5y*BpRMOH((*$q&FE!@XL~=;2xPo? z$RtUZAi{P0)zNM8rG?nX3RJvzM+mLZ%0Hlibh*SrrjibB(Uv$*v=lF3MG zGbb?!lCTSCf@@0e`DL~%Lguq^%kkg#T?B)XmuH9rUTpoZf3199LCJ1@%A5K8*UbNM z0pNv)BI2^UXpyiq!n2$F`_q>Ep$#O44cU-6`q!Ml%>18!@#Mi-zaddX{^Wn2<9~l> z^`XsqbcekY;fVfu$G@)qQ9Q(c`)N)a#L{Tcak{xL>CbaI9WBHx>#s@ffv^b^Oc9kc0Uo z8RDd7HEq#`xV>?D>vLW9Agsw7kJY~ehL3JJO7bl&iTXis$!Rn4*I={ofu_jPlHErB zH3K}#NTg1kzB%1;y*HxE$&dN@Dx|8?9_2JFJF!qkv>WGr;2V(~K4)`RZHH);KQrnJ zR5S7Nl5^yjK{h}W>a2Q+M5%Wl^J)53f6cfDBR+5v8DFERy^LAd1k{IurB$80KcUNd^g7Z z5AOs1nr9HkoQG&rI6wTq`rr8Tx8nqZmoInvmnZ#yeB&-2Z|%|3Ki>=)nYs1{J(aReONN@OE)0B z&VW)BG+~jOq1i>sH)#SmUt{q+gi{RgdGDajc~2Ao(pQUaVIT&9gh{W~;`X7l;#@A{ z&I99GYlG9cBkC;%>qbIYbB!n%evNFbdTG=Q7-6f&C!m1BHYM4pZ$CN^|wt zH{QYbHn0FRU=Dl=LL3^>(%Cv7{8$3tLB@z47mde_0R}lIM2F;00y6wLfJAK<7&KpY zJYfRRwd*dKE>bG0uC*t7IuO^THV*E2_a>h%#R_AXSjv;bJ!CBokRb+RPYc@MP)|Zl z_coye%yPpC^7tV=1N5CC5?Y*?66le+lc2HyqlF5h>}#kVMOn09c^u3JZ)BmRwood} z&q_)G{iqb5>%YJ*+UH^tM18E54h3%lXC>}U{YQ{=1@E`q&@g;>tz~b&vyE{4ovSfp z)VTZ=0H9cDo*KzAg&f?WdIVzZh7Uc+(h8n*@U&dg=za($v}}$^H4tEE8#p@>zEvC# zAwwxA(TUa8o~cq+l%sZ#%5q@-t!FV*t*nhpQ>dD(+{gujy))UG2p9vbL$DtHn8TmW z!3K+{?l-oWvYr|r(iEK4AEdONGJqh zJP+_3xYotRUI)x4l~IW7LQNw_NbZ@-H~p|Kmjx^UpPpTuc37eLGYk0TskkIf?d+Wk|7^f@BN(0_*%0Z~mz;PbhVwzwY{EOjFC$>wiDjxroCwAh61*cd#K%~IQX zf2x%k-=g_GZO|%*U43^r%ZVp$g`{bzK~|ZHHPW3Iikuh!LI$O=thQs2cKL930*wRd zt#;L-c|mMERtezpjyh@z8D0aJL(9PSzy92m_XYuA+>R{C1tKFA?5d9Hnri%nu4=W} zcA5-_D!5x36t&HLBFV}^?{i0mDJ3VhZj}2y`&BHJs>*ey`yFNSDOcJWzs7RtlDYO+!zioxt}yxykOrEw`33~NHV=kX*@SwOS9LPBB~O+IZE-vRKyHJ^?uOQPiimD zda!0KUO^!Z8uqzFqNG)(-11r3gYgbL?gErHVWKSyLGvBXalge9c^?Y+{q9mfJ!{So zF8IPdHy?SJYmmK<$emjf-UhqVE5j=*7{*O&?=S#j4 zt$X?-sW#Jgm%cRx!xuyudnNKgo7I!=DV0=Xn3l z=Ma&4J@YM*n~(?fkM;L#Pd5Fa1pyO=qjrb1O<{{k$A`xYd6eoTv25TqxLiRB2nvOZ z(Ng}^6Q}cMBF?kqdPzY&SH(#z-x@@jCOF&fS-Ey?xVI4EF(ucIhefkLcJ)t8S6$rI z(Gj;ihND~`MKv-_|! z3hHes9(_Pz-0i5_4idG`+}#}=>$(%NZwaiF9`nAd$XR#ryl&xViXGM`TwK3VG(oIW zg*DBzcL}G)PG!fT9A&0ycE^3QV?noVqbS^S^1#(zf#ha*O5EH7M{#>A}MW z4&O|s?CCXZJ3;=fS2c-zLlPi*`Xl2gkA0e;$?1{p?YiTCl8RMvJaa&}PfjVtN3Vsq zq^S6!I_U)luTBwaO(QN{8jn3~0P+cO-=JmqAql_87RGpI?-H=zz!8ef z(Gr4TurEhR9`umZgy8I3WB613Ycb`}8({g;7tC6L`X@ye!3&SVW}UG+okTCcB3$xb zSU|3uwEIXYFy{%G)O24w7mYos>lRYDdvsqDWUHzhb(Ub znVX2gGrvh^k z>~nMCF&mF1FN`{7Efr|>Xz(YBqCtR#TONoB1Nu2O46UZH#Dy(8DnIY8&2uN=DCRcS1H;D)s+XqI= zg=X_I$h}M9seoDdWT$5G)m*xeX&H=mfo^1AZQAV@4@dY{4(E^V;Zh9vv1k>%+|06Y zl=n6%8|li&m2pXBWO=FR9*OfzH5(s$mku*qnlNC;pqHQFA+E%Tu$w0BtjU8vDxuRW zAw4Qjou+xbXUtQIjv%*ohNE|#RkO>DgAK**Xcf(`&Pf7{@U8H-^K_xC!7uZ#nKKYc z^+>ncRC1$@LKNEJtg+*!_>_Gby;Qj~n-A65mHn9JnjMF@JeI^x$?DRySZUh7o8tGw_!5Ilv$(r2 zU9&ytCtJO`=Newp1_=ydIM1RdL}WD%XTt{EIYNl0jt(^c>TD)9C)&iDl-h#sX^r++ zuZ8}Lv!9D`5mQLn9p$9lpFZm6Hb)a1`w~N5L>Z9-EB<1*Cuf7G6(z2>)3{RBrH;#e zG6yj7>K=9`QvCr$jtRomzBO`ggs!Q(ckzwTN298qAh*pRN?X&yksgQJoH_QtD;-z-lRfpssBm9aI3{ap|d`wm3(918%R+DKWR8|}+!(F5JYFTDk z*Ar9G&1f7K^;Jl!>kMo2Dphg?Qc!1UY{dOP6n6IT?tz2}$OP4?CM>r235K$xg5O3i9*8;-RhW1wofENo%2tG3s zWbl2D$@iSMRelKH-ZRZO81jYFjS>YyWst{iV^17mvP*aE=&TIiV)0?{fye^1wQu|v zH<2SAde?l!R)L-mhnJ^^ANf@%lvOy&9v=lbccU;Yve3&v;9ZS8zInh&*f|Iir}-9} z2Sa$%W1PA>08%m|1>!#aNndB8BD;{S1uFv>(U5JzKbky48 z&L|iu?tUU>3qCf$btmT7HL#@8J(4DD8H$YUCom@lFQ+W7@EZr&nLXNO0pd{SFHkL! zV@dRH{QR#i>E+M(HQKzu* zSlVIx)g|{>p4iK9p}&V7{vLea&sMufGa-kr*32!`Nui_*clhGVqS_gwZaO?^uB4x8 z#)c*40@Unh7~~5isKU-e7+N*zPq!GGIgLm zh#n{5r|zz+tEWju&JWS)?%#ET|v| zSHGOm7^6@>kNxG!c=h1xPe~8=smb#^KiFZy+lro{!Zr6mkU_U5;CmYlExX-m1tTSZ zYt<2YtRLhuuIjadd*!%HM=Ga24-5m6h`WU_p~)=1$2wB@lbOV^lcgmX?;dc@D~VrN z5lC8e?y`A;i)yD$%=8GSdAQu`Yx6+HtUD;Z>U)t0ta{~j2^Hdey7 z%;FI|kub+kdXZo}XTYZD2!KsdQs_-?hG%%LmO3gs9X(tPrpxO~$h>bI4A8|_{{9#V z-G5Rkr6?7WqO}#P3L4CBc{9!qLm2t$$&5IX*#wvYc1Aq|sX#w$^b&8MIw@%UkPSA60vtn_Hg!5x==@uD7SK**&aKvd(mx zzsxL*cK{lfH;s)0=L>BGUzv;C5Kwi`1XUaSI~=}4G$f{hZr$h>=0$xYzeF} z$95S6N)|MM*6(GR7Q=w2VXq{le1CF=38Y>N$NRy^4@xG|*5H6?J1Mt)cbV*JJFVKk zL-3p28hAvai);5>>QEmq(a`AM$f){oQue~&;9X!HQllJve{{8cWs{_^a0+zefi1fB!uG_AgiG`Tp$Q zE4>E4?|=wiRY|}Kw8Y?rF)h5KY`oB4K|dVk*;!$vbTD5wPiyFFJ)!A&v&)rPGWKAk zh%Qz_PkNI-PDhyfs#Tphm5u6!r6cs`DcNbMAK=iuW}ITv&7RH{<+j^M7TTf`)$&H^Keh z&B}8rDhdlG5x6+wseUs`JoVQe8#wu;3k*yDkx2zD{{C^?bLflXE(ThnGxRryw5;~| zUM}os^VO0zPa=LFF)#z=0Nv3|dmw6F6*PMZY>{H_Pb^UbX_F!$ezR}>dKQ2?xRwxJ z$ts5h*e=WR$rBKG@{=^EG5ZfIXK3IA)Si_Hb4;4WV6_bPMw zr6!OpzP`)dmEWqc1lt>~DKY7}=)J#efuEwqWaz+GY`uw5vc(I0nd`qNHuS%6MzH^b zc&b~!7MzZyZ2!$49XrxdzW+b)M|6xRGIEHg!3jf{_FI0K;k9M&#A2!1flsu#YT=Tl z)Yjt=M-gW)tCu}jYtKETvjz|tL|n`C6e-TvdFzjp`PrF$gfnkTQu zL(m2UERPPjY)X=X88X9A-TKo{=r$$MXqB3Q**eLt%Tw>LIU67b3}=}fQo;Pd0GGD= zo)DKH90lSx9yZd1B!naHZvGHhLw^%kJ>bqRECT3hOt}#1aIkzSLY2&s4X=UAuc16$ z|DVnbyasY%g}W9-{Yh+ft2K77zV9fI?SEm8m7fS)2?#r0R?D|ScAeWv($~&6>D=s* zUrnWXKs>@OXpg|L%XHLKtAPSTzWXBD2`#A@YUv|ziq&&do6Sq2Lg72NTNZCuZHb3; zPqx~U4pOrkX5qFo@B9U}QQfla2I;Sf6&%A_&AjiLVTsIipV$ zq7Sg~a$7xG!z~Ccb+y+zEjKyH6rCG%Z{j{d+r;GXBqSgv+n<4d%sKSb9j~Rmr|}zg zY?`7_sQHVug6fTtJ?bvsbvKTP2n(50hX`$2CA)94fKyajDg62)Rnj9O8YK1OL-e|7 zVDH8y8bZk+ZGcmGT$jWS1M=AAA}XK0co2h5Znr)6`$lA>2#LH)-+I?y;z z){$wu47=pBT_DPg9bV6%yZSs7o2?OSiO)CHzmhz>#{D|qATPks%ghGkM&Xx#BrTA> zH3Dbr%2e-)q4}c14<{c79`pTrqLTHvduc`Bs7J9(6C`lTxH}Xbw=)Az&v^#Oklnyy zx$d!glcMpo(J8D>n80~z2b3nVGZ8p*>hug@ZBV`*Qm0DFW6d+^<~UeIV*(K>93om> zt*AK{q!RO3M+WMPaJ{Tg-5-cjG6Xe#2N`j^(I*yNr?RSsD+^0&6OGyR zEOqMwX#<-I8dQ4{Dv1(}IS)*%cdA-)2qD;RY(@hKJZx@&g0%n-W!Zl4v zBc7w)SCW~o>`rQ%w44CvBv5TOz&xt-v@A7rBuAJkT7HFX@50A^C-y%zP( zJFfAJbJ!;?V%*yE5J+Wf__{>O_Pf05o2rtu61?&<@0Iu;tl%}1pF^EpU~HB~YVZBk zyF>nG;)pj6vz~ctO)|^QJ~}glKPh=)3L!<6W5BO}^a@L#9naJipz@pau_ko!7v$OK zG6t{#Ije{D{W;vO^vB+%mQ$%CGgQofP(aNDV4NYh32xl3dbJ(Ymn9|eKLbZmNAwIl zn+pe`%xdjc2gk2&*x0=oxaT(1>J+1YGTVJq7`!z!gPPw#6-QhP= zC>&cd*JN=8Fs|uafQx7EeW0l{GBG^6c4){H$*(nf_?V1w5{237u7JBx^3!0SHN?Y1 zy^7R58o#v@4y%f~BNfN2roQHV?j3j>gDs;liLc8PJ7Ws)H^_btSNU3_Imu8EAEwSl z%&|a$Z!8E+Pfui{M(Gotz!Hic8`8g*X6Gc^!nzad_wj~*S?pP~9s*BG(FcOe{DN?% zvlCw~9@%ksr}X3Wd;^Cja#JC#9)it2dK8Ou@P8ywD2&16I!J1kHVQM24Rnn4sh?pg zG7aRwHgbBr?ZClYF^C@UE))+{DaV?^%Mt^xPujcvS_-| zwV8e(4LpRww;mTTPB<&6A<_itY#X{jB7WE= zh|mFCEmC(IuE5t1x$>R9VjYKZjAmN>YBjH`Bg3|y*0e)v)6}_WuvJcG2aK3>1q*Ax z3GV6va;ZC5at*Nb=fZ?-l8%9|W>8pPn@K6g0JM0CB)b~LS(8qJIIi-33Jv>W{Arft z>?FRJm%KHY`})nTENQ;^{YK!&RlI?mOA_>K@q_Ch9M4%)FDWR2ewfx&#L_Btih}H7 z%LCh?T0NQ@>y)1Z`$jv@XNj~o_2IB11RA)))o1MoBMNEvh_(uQlzO{XN%<%QpKpYf z+=X(?6aqMptdLg?5EhD0)3ZTthz6$oIj=CCxH?R(0QpaVW_-FAUaEw=#&;ORmwb(V?dPN%A zzWK&vvGUPS)Ne5fsB@t1aR&NJ4#ZN}T!AuXb` zR9mTIhB%p>q+K6t$rwqWmRuZ8K1$rCA7a~{Lstt#qJ7R zegEkdF6$%qQQBcQ$VLw~N729|hC&WPrYgJ{@SMdL4=1E3r%yzR-104GF<)Gd5m~vV z5oN2YG^-kMK%%tn8N1eLXIVQtzuw36E)YM)e)agh5fFk-4$YNSmhh$ZSl!Niu>uar zUsXDGK(qbm3pzL8%=rg`RPQ|F;gsb(e@&RrC~{d^M|B^&EVzp`v1805k{50mDC%rJ z$kcF}OhNt@7HI-L9U~U$RiB@WC@P>H7Rsnh!WBZy1Zuch9rZpRPcVw*OJ{0Ypf?ur zP93F$41$U zW)3He(7ecoJ4T>N&Q@Y3A25pnYD6%-pK{WaZiwtR>qWC;(s4$l$h+twQn)3@S`b=y z&r~36n-I)I7-GWH5SE&v_&61bO6BjUsjr*sosOrlc_C#xGb%CX!C1BSX5jCLOiC}& z?4O4H+f(dK^UxR3jbG#MuP4&G2jt0xsyV>WLLUGnT5y{(9t#`G-nH$wmT z_(0z{gjBh8iNk8LpuyReEAT*BOM=|X@2Ui?^$^ov7*;Z2(am|A(*QwY1np*?ndQ0k z*e=pv^rH3GRWs})V&C4>ln6A!& zB!O!7A~)q;Dl0kR!XbAyD0v9g%NgUBbdfwQgW6*`>dK}wgY_H6>85u$!A@b0FPcMf zV$!34w?iP`8W>!E2T7CMiNG@NK>~lVCyd!A8pit0AVH5l0ukchM#A&ZdHb848|6B{ z@hbZt?A*hs+qP2CEcMVEDYm)FJ*o9RE&QdiF~7sx7*V*3A3iR3>?prkj&(qs0qF$lRTE$dmWpK zVY@7RH_nQG!V)B?hz-Akh*A6bpzvBxYTq~5`UGK>)+C{VfRY0APga?WH35`ySEnnqCYE5J!s?$`!%4Sl0z@nIJ z8e>**n9oVCpE<)&4#}&Af!}hCkG7#=%uWSU(IzN*oSD>n!>VybA#*j& zso^R>SjLLs;(1O4NKFEHN3fyC;ffj)zu>ksz25C z?+c)Ogim(j=xW~;B9Z?Ju25`W%A_83mSyFB`R;n>2Wds69_YiP* za)wOGT}U-~vkq^NnYg={a^E7`UC-E|1u0Mjbq@ca(I25H?c6(R_+hUN-NB;o-ADQ9 zlfL#!hEMNEh)y0JESv6k>=MwEFNZP@# zHQK%O7DoF>MKU0Cm+;kT^p<2wvM5cdmxdClaq3oUCP4Py`id^2c zooX6%7SbQ;?7rq9Il41@td}E&#aG3r)(L{j1ef!#?D7RY1BD)(-|ksD;`YdI;*??z zM0SEFjgm=qIBj>owff)%GVZalf2Xb~E#V_haM;c?Y|fw0Y#bPT%nkAKq?p;p14Iv`sY<# zGnd1N*SDdLVC-a(tUx+rRZ-uQ=rV5lV+5!6K-BD5lDjk4r@<^cj%^p9xEpW?lq33Q zrc}S1P}##T;o1ufsL}tqVtq3H^^RVRddYihFY7{$zPUKV1$dU^dR7MvJN-QI2<7=rq2Mic?{lK~?3-=k?b6zKTSQY(+PH0LX#baT%>kk_Y zQYd<7eD9=mX8tA5?%JcSZ0~C_n-#;U8`cNW#Z@xx8r!t$&K(Thh z+=>3)v!~&SLkF*+OQL30RiT7Et#yH4JA)nFn}eOAp=tM35Ghu4HkL~IAAmE`_=r3I zY(XrPFZP@(#XMm^=Hxt&_C=C{rwbFk(a(Usy0w~}$=wEfw;u>n*#%n3s{E|U?h$Z)(P9^) z!NFDIY~oPpvL&Y=f!dYJ#=6T8c%zGuB2~sm*O0Vxiod|1;jc)9DiB_RR2IlDy|oVn z?n-;(Dj<(8^vtZ*DPj7z+}bRmj7wTwE=*fa-O7u?R9h*;--qGLrh)(8H9tOaTd6-{ zrk3DKHnfiTqMnxYhH~g7JDx57rJWAo!RhQimkkHiGlD+0AZ3Af&7QD+jq}n6Lhn~k zcYov10+Rm}MX&rn5=9e#{sS-lztcnqE4)sr9}Q!9nqvF35v?Vr#*~aMv3xu-JG%E) zhOIxae6`*0c)tdtNIm&zYEtAp?H&TY)ds5>7nb`&GSe?8C_|0N)keD0HpFeAZ9MDxY=9-$di!c8=C)1O-sDDK_sAwRb)3 zh0#%Wuf5&YB4k@r7+Gz@bn`>Tw}(Ze9cIUG}{K2QzKazd9%5+gQWpZozRbf}^>Tb&8qul~OxBWZ^Ofz)UW6>wX8LA*?0H z%k0X2p3_(NXlf=B+bxn4Hlw(2rp3i@9L+-4D z+=&@yqGFFoDOA=?Hk8)xE{x4%&Xeh<4Xi#xRn4|(7UFkC=9dkf7-Se6kCv%xIXrXY z9cmwRhla|ZG*)y72zJ8D*cUL2-w=xhCRiL1e-pMy9@oBbu70Q79mgOpSsO3QlYxl~DK=|?DI$;66 zak{aA{qvr>$7HioqUO==>H6G33hUXq%cAqf(VO9WV|1)B3ll59c%oJJ%u;mVD}y7& zPiB`C&1O!MQ*f}tfp6Pju7TD#*#2rDt#~uI*v7j@zrS;`8E=$i(I9#4&>ad1Q}i2~ z3b2<38q_mq>>@nwqMEtdp)UFGtMvJiaw}r)N4;q6j({S|pVh*nfU(dP_brWXi-HGt zh30ICy@3e^@?gt|rVw^`NEJ3$kW#J&HAK_DKrw7Nve%Kcnd$YYYWj{V@64C0cAeRe zJ>Qe~-LKLvhQ&=aWo#RM-9x&({XuSrmQVOIKMz_clGbq%a=Rvd{K)xerV{>cco90U z@6GRG!ym>&7861g$_@X0zNnw=pd9Y|)_M#F?E^hGx^AlYXp7YG68OTaxXbX?O(WOx z5}S+sT&6c^mqY6L)qd9#j^8JU=L{#FE*7U+q!bDn_d4e7XXA>ql1uh7T^aDB>DOR# z`2kLC`-XdsC34Ib3pTpbQ`e)5db%~dCP`1h2|x{celt(zUgF27@=G=DwMu;xuFO&U z<|&r(@2d(q`K0jck4Tojfq5)0*)j$i+EZonLpDoqGG^fqir%fMHW6opcumr2-0@u+ ze6Y^0lsC{AH?X-&E@4hGgA`qU6Js#N8Y|^gJD!8phS=jf$t~#%6z!1?u-|P~gBccM# zy8DQpg#`?5d=0Rr&}^)OUrRvc>99OplIwmOr=sU$nhtRGiD&Et(J{ zgaiogkPslayGC$#cXxLW?yeya++7-Xx5nMwy>aN%khRv{`#bxbJMOsS{^d~P}ifch|^z1zT<@CmBgFU)6u=)24 zkH3=|b+g=Ca}$7~w?$5eo7Fg;AqtjXLYOFXwkPzB28~SwJR;>Ev68b#j`pt=zsvyM zJsyJvlfUS-Z5`)L1C!oirg^ZV^B~#`8S(a5*E|G%n($4anB0fkd_v&-FE03=&5P+-tsAhX^ea@ng~eq_1wu#%US(7} ziF2)Q&CV@%ZI0wd)qfD{3Fecy*R&?2RLphKPLBK z#uny@>&*9_T%n3!sis1V1`Xs_NQYolLOeGDQ*MWzlYKDxJAs+z085kZUj`i{Be^Hm zuVaH)dKSu{5FUJO5_q7$pjsr?&tJ=@TnD6SAD6u9&oq7no%t+WC*w{*&rzypTha-R8Xb$DyCZu6hy0$Lr#&$$u7YQ28jQKd+o zk8ZVLN3Xts8z}tQe`oyG`oj<-s(cN-R6xt*u5PSjW>HolHOb_a6VeP4p1V4fSzJ)j zCS>zBi7`1}@t`3dgJZV2Wa-!EsV3wHkgg7kQEfIOv;pk=T_RU=x$)O>R2 zb;`J|cK;Aeh4?5lNZMqcqTrx$nA}J$J+`Q?%8vf+hF~Bk!H5MqyC`O zTK|@=U*FM25n^@cr%QkOJyamChqrwfEuI^O80Vl9`6;E-lNd>!*S9Ph_gRqh$ZCUnAId$A@;<-4kTg8CCbKAQW62=K>R zkMs^-60x`jFDxW^$`27WO`ibOoZ+eSSYa^Pdo2 z+c|71@pag`rF4n%2+7B6`a&jVQ}NL%T1=#(Sc0$RNUQaUR*|JQHS|6av?9E!s^WoK zKi+Ba2AIa!=SB8F+0Dlw4S1rPw#{_mx*u4s``}8hEJpxbOcczP zY++@`P~{-k09s;PkJ;GBxcG=?pMh+ThwAwcHHcLcipGXJVj3OB&I>@GZjvZ4XnD2! zNF*;UHu>fNJf4=mmfNwDK6>tOvfg_BFn41cj9bpVj9x9~OQf~f_>Oa*;=+_GHw~X9 z!R9s)LdCg&-`TEc`97#$wsKWAEd&+?Ww-Jh`*>-yJjWeA7u1>QxlH90G^{pPOA*J& zc#(x%TOa&F48zTYm85M7bbHxx?+E(Oe%6wK{D!QxaBQ7ZmH3yUZHn6|K_f#}hXcb2 z(*iRAnxGqMPR^wOz{d8Av-9_E9xzh3Bg7gl^r5Qn7v3i*rN(K-_-_ztd%VW37n3JS4mYseXYKI6EBz$#_~H zw7YsdYy!@R`-3mILO2%PrOs<`i9>(Mk7SC80Ik1LMvFNl#hq#0UNxSp~nykkk| zxY3uG5%YWvJ8}LjTzy1zj6tWT*5#5q1~zEZyq6rSDfg(PaTV54h-)cLu(X6+l#6;{ zs~Z})mqMt-X3MT$&kJ3V-@Vrh=^?Et;#+J(t!1+NrmSWE7a|x9&~oMywETE7rnd;Y z>rR$OuWDWEDur#9oP^i0;umwh>d$%7neM@B-aTiC!n#q>q;6_rWi!H=x3+cWZy(0s zUQ>6;Ij4;3F?EhX6>0My_$U0-9_!6#of}H6LJ$Ecu&1PPwS*r;F_eOsU2jbj9PImv zz-7-h`WHdbawBF!cjGUQodazugxdk-5AnfWQQWF`Cfko78* zpTg+>!gus^-fl-G<>#%lvV$X7MAuUhMOK$K#O1a;EY%ulv)FXwt-jJfh=!doGsl%e zsU}AI3$67&d1BZ8Lsa|Z%?D05l$Mery5!Q^j?+nC!Ww(R9`(0{^c74&fF)=lZ zB>+oR10m@V+xyKhI`aH`dQTY=-uFAf^>V+4yT{&D_m|!rp#1#Y>zX z=}J-*`s&41a7M^6G^Ec#&L}_S?6%Eo&Q#7Ii55VeIvm;}aVxf~4m6uX{4i*wzr#8O zRGUX-kO=%!#{bg^pRWkM*0NV!hqay?Lc*MAS_(`r%D0_UuXO1_Zf-l{s{L&qm$SkM`VIu68!t)=&q$^W&8KQV1Q zc(0LpWY`xb-2YFbc{+61<$&1h~}JX6>dF<3z3@+*M@q zmv>RzWrU}N=H_j2?voyrHP@3tTanx5OjSw=&!`fSA0(foi;s@yZyAf<9@#J7p$U^h zlq`}i#(^vl)Ik@+G1b{IGrbu7XD(#*xkEk8lQg@LnqT-xl!o*`e(m0_W{Vd->ArIp zvAli@lC(CpgF&Cj zJR6}ewSzzXg6K+IAZNwBg0NiQDK0o0Pz!*j>Ss8_%|9WNL7-i_s2|H@e~a_<+=)fF<^X_33*->O zX{5(f{Z6COEoCPq3$ z(GjQO4`4c?rY7^lZHe1>ClBf4dVYMOyURb6Mf=S^ltp$|*Hz}S7GJ|yWoAg?a^+gz z)Sn^$*C(F<>UEwwu|hE<2G3F*er&pd?#?s;v3Z=z(Tj+Ro?i26yrp6Hcwa*zT4p9p z{@6y3(WvoOwA-I%wR4oUOm_fQPC+5Vrt6KI#mo=ZrQPmcy|?eWjz)qxD70zIXOEl_H@JB+eqHe};b`@nxkFdGRv5ob&~Q_gCwlmm1z zsmhRMq|HSZS!ew=uxA*)u_uH-zMws*q^vLqf!Wz@OZGdDZOrLN)+8OgiIXwLT zPB|p!N?Z#`n{&-!40(~6qI{}n`addZ2S2znman;XpX(_QuExXc$JuhKE?25SwGI6+ zcr(syN9c|Tw|wM%z9p{Zjs4T}o_In&8A{(kz-ny>6)UM8AzpmB{iFp?VEZT+uM z?SHwi`3{h*ffFqpz-IZJSz>UCzx2SZ(WIK}>LV&~QD^1>nyfgg%HFMd7RLaRD1b(0 zP7^9?Qs86Hr!zTHv5aIdm}g4!M7}d1URJ?ggugvu+RJ@X(dZcO0Fcwg{{{BaH|8?V zX?|)PZpI+*#!&p0DIWx=KTdqO-G8PZLjT;Nk=J~Wx9KtKUOy+;LS1y82#Y`4&L$^IgA>Tkp@=K zu{J<$VRX)=;>dqDCguvWNwTW$D>t?GJ++vaq!h)fQ2p7EA3Q)QLP;=mA zfIssLA9k!f!H4?G2rf*?#l`k2b$Ic#Te)~an=sq-UT=aHwW1Vq&gwTtm|Uo#$5Kf zaT%CK_S3E-Rb(blT_b*6T`R-~%LU3Cty!jE{E6CIq%ZH%7iZ{|a*Xc}=hN1g;!IBi zY~2$vyC|v1bKCOpB13+BjS<490gSr;UR=io2J~tw|KvCww=4AWS@F1CBOvMwjU|)1 z3A_Zy&ufnZ3OhBAZQr(eP&_Gp@Xd?Fm%evCV!d?ppFg6133hei*Lf>wDpKB~E^qek z*Q*&58ES^Tp{e_@nWby~Ml%g!=Thl(SE8w-RtTlhejrp&;2`(?X0RB6$VS;LAd|_G z(=2RAsipg^?5qq`@n_6|hg);{HJz%K-lZ9cexn5JLnFvfsR(lUGPRC-CdjXFI@{&J9a_Bw6DuTlpIYK)AT{({;~lScl)DrS5q4W z%h0Bpd6DH@6Ya%Y$8 zQ2vuBDs9Lgo0GyrY9owF!$o-U3jGu7_?>;E0V5|ryq-HbO3#L>vgYEGnh0DQtd5s; z%FL@|K+Uc|;isE%S-`l)NLA40#&k8mjGnc(n^ z^Dp1xAKp0xr9(Scw)0rMo!t9Uz-ALv)KcqSx!Sz;JJT%s{F&~UNCqI?F$6l_=U%^2 z*dXAhU}*aYE9ugCRkrMLja`GG*+ss|sf_dp>Yy*81|u(7>KbtA$&^m(dgaoQmwK(8 zN;dilC8up}|3!*qZpVVhm+3*rcc`3{N=Zp~Xuas9NunISNPL4&ol`u?q^Fo&D z(RhZqw8X$So{yMGzL$*pwHp$v_m|vDe$dp_MkO*}s2z_xG9aA!Mx&rHkRRW%36=rK z<_)!;5hb#v2VvUj5B(%mQ2P&dWVR;ZV3_)KuFD}YejD0%Gg?QI@H#a%3^D1HbK*iWeu)Sw3nVXSU8kJEb4ys4M>zv=H?{OYzZOmFo8WBU-lHn=ck=_-#-mCEYkVx_aiBXBzxuF+ye zm`at(C#oW2lRU_ohl(2OumscAFw`Q-ioRezF@+FcSL8GQUui{A$e-2f;2RYE^KaA= z&$POplYz+xo{__lwAA9C0Bu8c{{Gwi<3vrGyCg#7U8#T&JV*DJTR5bD;h?XtGMlwu zwXXDJ^7&o9j56H@lH>RkZ~e`!{IE%bSJcLF6Zg3qpY6&;{v`JYn)s6Mdshz%6q`gP zUR&vp1e6ZPKWnDeEfL?XCfwDm!vKHUg|D!NxA4~)c&E$~)6Hpq1f+z(Da?HbIkfWl z?(4KmHg6qyz!GZ4=AXb!CBdl4?*%q5H8`?a-6AhSX%fI|^~er;(r++4Mk;K|a@ zGbr@`&a+H6LK6FKN-OnE$0mB$P{9K})wx8*cxS?HWnEAtz0G&@5hbkdz|Hwxf%~<5 z+OkQ>y1SF8M>7X6VLvpww$>`c6%LP1<#9*Jt0RzXYG+5z8+u#*BAt2L7Y$j8EQ%ic z`$zij9Tw@%!Oy6z#~;*ouCiBk<$)9RjxKMqhh*qwT&-5N%wO2k-_V{DYOiV;AH%4R zAfVCvG5vjL=v!^09sgw_|2&qzVAEiTii@kKZ-DKYWTISuH$O+<^rd3irWSxHkHKHo zRkNGsY8^wTvf7+4h!y*KTEpi*X_&ry?kqCk<1iYXT5>2*ZKPAKpIr z8TkF0Jv>uY;rG!Byc&x8SH#1?86w1{)0_zBhRQN`zn!U=*KyCc7^xxU(0wt_dR z@D7ELp&;T?us#}gQU7A!Jgv-p5qvZ(_yqilqCU$%zXdZ#u+@@OBHX7IkIIsr1=~&_ z3F=Ws%rh~uhB%g9n@^FlrQB)1DR&5g$hzoA2{b7Gq+fAc1Rxj4aX_?EYBVB=&)sgM zBU;~#&LG5wbM;_JrajJHClUMENPn?H)DWFjs!vxKXT{T@S8z7{17;cva)x>{(#7C;bIm8fU64PA&M2>Z;mfcn@`Haw$;CSFWDIW$Wu85O%`WRn8H7 zGj2WS>2{8nJMum6H)iU;)hElA45`K_qnOVB3KqGCngSexAP-JrQy06wL=7E)~!WhuQ)77^Z$tV{u?wf7Wpqu zrN#dfr_#w2XNT5b-DaL4DGRo{!LM>X=?Oc$E*I+fj6x1kbwLsSS@S>6=JZQytT=1q27(W5|_W5IeyE_ACdU&J-ewdt4jN7#aUR?4o zbo{&I%YPw9qV5||J<$WzzIE|kKVx-rBaRceBf?RgPb%6y9H>;{lFpu*HU?jHXJAnx zUoSM@l#?;@@PF$2LSbK5x-qeW3NwsuSEZy&7aC5|7e*O5nryzNpZAl4=+S1D6(G2-+_>H-pPb_zKE((CHcn!Sa6-}hxqsM=k!r9e{xP#;k*=}724 zPf~c7a^C3vD408{33RUivaH5I*}@@V`CjO=R)?l2Y7J1L^u@7Y%sH2p%fc_7=04{s z1`}w~Tt0?rMuR*hHdc`Vi_5rV&pS1QZ1QMxh~e7d>kY*_Mv7_U+|#aCPu6Sz$n(1x zLlL(r1dh28w7kO%E)Zv*U1Xsx7lE%N_+u0QI7jO7Ysn?Jy4rVL%S|aGU>G}CD{w?* z3k2AmF2H~apSAc`HLI0_UkyF^1I8$Nsd|uF9$>To<+Zrc&?*HW&?r+9ji*xB=XAf} zNuIdnJqb6#z}3}ki)!JG&J#n$HyfdnPrNfwG z<|%KkGE17OXEEx~EDCPeu^3Go-tQa;0JTeUOn7$fEEG|2-#-{u+1v9koEqmT1|TvS zFNcuHsmNzP9$CZ{KgOq)%x9o)o|f)sCNx~EEvJoHjY65v)k{2B5{x|(*6i8=(i_Ue z296q4Be={b=xIIhPdU2?p6pe;-B5_qqa`6q+fPn>-fIlh)cYe#HFC*$(ze)OEeZZm z-S>R0$*o<}8d9@O^TY^_c6sKO8#%p-uT0#vf@&NEEkMnCJ646pz?cHl6B5=XtlrKSEwgHJp-oS@<1O?uZR+|)(@g^4SG zzMG|K&PuIip=s_K?{{yH)Ger8`1S+#e?-3KTg z*-anp7D}pd?GAKeMXfBgrOPg*7`o(_sjj2}qtpJ8<|kIo&jyujibNdR#|u#m43NIm z!t-7WerHk|MIdPsFH)R38>vNc!)9LoWW+3_u(AMlB4>)pSiOch)ZhjxR_TDr<1}a| z<7=mj@@=Z^_eV+MlJOsDn}bD)o2?oY5{j9(JcMZRIScJodkpeZ?g;O`9ZnK*ml76{ zUjeS}c}=E3=q@{6eX$98aH!k0te%b2)0oFc^*)B6`|k36(@ltvRCl-F1(0wNCAZ4a zHjLv=bJRvNy5Va8?P3PV_6QWF3-s2^vzRo1IbTlDG?lf|i6}hHLOfR6ECp1^Bw&cM z8f-ZkrrGV+)hru{Tcv?t$AA^{tIyM_ot;;v@|pK9ln!G!9IIzGlvti^x!A5%H6aox_jB*L}@iIW*>41>Bb*n=!2^1%#`;*St~Us$0b|%-g+Wh`v>y3 z7T>hI%mY9gO17R($6>8sXxy)Y_!vl(%(_UK;eze)TqWIC!xFh1tE<8xUvn2?X!?FX zSBO96(6-Ts?8P!9Wj52|lSM%$r(gAEsp1gefiN**9) zn^7<4How@t@Rt1OQ=GRg$3-UL-mJQKcM8I}pm2(&Tj8EUcMV{L=KK`|Y zpeoM1%A}KvSy+@er3-D@K=q@=5EduZu3_P^GM24bm*N!Ge50*Z)`{j}=|lN4K)k!X zQ8Uok%)fw;<$D-NF^iXCSe*CqtQ%}fP|J9cLKX#e%Q@7+W&rNh)_h>$UeIgzIex)!3N{sFr zR;xBHXIZ7Zit>zg9#yR77a>uHub09rUHCU>SJo9`SG;}z6Aur@U3>0@F)Ewh&vPt| zv|ur+8o+U4mXF_M2ms>g<>{04_1Ng}^X8SVXFi1h?B?;BaFgxP)j1wb`;+EZeuUI{ z-6#xWn$mbPH5zN9P~=dVeShKIM-}M=nS>5*nK}&TbPkZBlY5`kVMgKa-`t$1>xr13 zOF!IEYmPQXYe8x8(U!7KX~HiUqbiSq3&1iLIwjqg(G2I<6kP+L;GRsyK?)Ha)syfP zz_15ZabOY)gT*_3zjAOEbt21R)`Hwn{m{(8P=0Lk!KKBU681vBWP-G5wvnCcD~o)h zd;k>^bz`o;JCI}kjz6-VkiOG(vH?|z+_E9A*i`^xsLR*7&ylU7YF6|RopQw}HqAl( zZrjtNv`V{pXKh{6g9gckZ?jKZ12GKm>qyMGIpfYg~?~RMrXMXN6 z@&vPfT(kmxO;L4*z1Z(Ce|(&-Ds-Mt?p?kM7~XeE(d)O;n!pcOn$lk<4tOATpbVNGH0h&9o?)HWbis1-s9$eZNgC{$x(8oLR$E=c{E9~o|+mR zXnLE+<3vVR+%Ert^tbQp7!L;B8-YU&p5fJq@Jik#i~gj6zk4O2s=n-VF*}*+dp@mb z1Zczj?+kRDBx62`kj2i~8@ryd*2Szxy9t}wIBPrM&>Dq8Acu%a@P?7z^UMCjrl>Uv zG0E+iie-D7lil$c?J)Fq_%-Xp)+AqaH<*DNOxrA8q7~zs#>i7L(>Ry@L08P0K%5r; zd>9knRc&fiO7nPZyWL`*oC>~Vv0Rb&I8?>K;kPU;%&{yvd61GTNs&$J^CCsGf=ZO$ z9`t0El=!C8V-2ZNRxEu6V&;pDQF}+*f^U@m&6LnX!SMDz$Zu)-(o}c>D3+Q&uW+j< zDn0-0b{=&b%KmNscCW3p{ zngUTEQ7UVH3WXxv$W*5U>! zy^SnLWE1}eqH9H0j{Opvfl8{;$Y%lMy&(iKe;uNlh$WY;T3I4Pt+~&(JbHb&Y!B8E zSFRBo$Pt@FnJyV|7$>Wo&MR(WDJ%RIQL6SkU)IoMGyYl_YurU1<4zWRnDiHwCX|jM+`|BLrM^@Wq$8+ zWr)?ih5d$OcI@hCe<{#9yZHQ+hntZN=Cv#x37$2brgalxE=uz-)5=QgSE3(Hxo zsVN~V9|i}XY9i&#`O!~lx-qjSH9}P`L;+Wydzr!Fik_#d)hMU+uEl%0iq<0v{#d!n zr4rHA#I6pYs3?FCY8`H(HzyW1l=?o7h9Q}vB=lY{{rJB6QTJFL9Y-HFEaF62F4f6j zxGUM*#ZWKAWw}MmE8e86MKfDJBuw%vLwC~3s<@mp*H2WuHk#*sY~RPoYkb{`&vX)y zUx`Zif><843>TUX_#m!)2WX#D)k}gqoqx<6p~dF8Nn6nf9#~XTe{*lTb-Eyp1JWp1 z&%BLbRRwon1$8iNIV=z~j}V<`?kj z2=tG6`{tVY!_%%=<^$9dd{Jg^AokvS;}Gl0jURj`95Y>aN(voO1J-$SX9e|&b_M62 zj}i$q4_~HB5KXN1)Z`l;Wi-{x1NHi$hf~zT@1Xtpr6I-9l6ey;RgQcqS?az<$;@Pu zPRCzC!*^dn0L1~RsWQfE4LCSw!U2;{HtdKnB$e`YI$_6@g+hpCTnXz(d=~z`kg2aH z=fx~XbrQc=KB2f5UpG!2nM6R253%y$Qgx#llRd}hPFTHMznajnZ5Fgq75tmnQ# zs?9*g_qFSXx$*2!v&^|=nrS){e+4z<-S{u(AP(hb2v+!m4$$|9r~wOsK8sC6M-Cz5 z1dtwpc!#4FyUV10aoNZKQ>b@y`qXeppY!%U5K} zEFTj0{{1bGZ@{B~)HdB)U+M2M{r$-Qiwg0jzD7ge5*FMw;DCM;GA4~+|6D)F0Qf>< z_k)Kh5(x@Z(^a_v@m_#+iH$m^;duu(pt##1`zzU?f;Wdx>(%CHgR5@KR1ghHX>3$Gjd<3hP?0=V4HR9s>@>Ks`OGvBV;PbjzX0{S~ zxGI^OAJtOREV2k5*Wd>>@Gc=ft-v~^qM&U@BY<;^8UG7!F$BAY$qD@V*VAoEsK*$& z4T%xS#m}{``wTh$V`hF$vyu5-me;vlx(9JRRYn`_SzR?vF0YkwPcxSqeb)!v%vOWe z-GQO`5FAKm>_|>9g*$)M`;(L^%qR%+HIY`~i(^V*+uR2ZHi-daOInC>zQp*!b8q#& zf|S-7`BQzODpW~8+SG7y+}1Cb3AgiFRdPcKU(s%L7ZFdgD~z19pWh(WcZGJ+EMH0K zIYv@*r0)Fr5mHFL@Hb_j&BI~+EjG(qPlOO1!%IFyCb#xlne^B)LB>3v*Hzrx-&+=O zYL2$7EEjJfO(Y}_>H7j5yoi5#_U{oGqXB_1vUp)${5^pF864hnFhY4*6y2x)+o+)1 zh5SYAR`$hn)&r?cW4xNXy86giD6J8 z9w4H2TR2}fzds|X{NUGZe@OtxC~%;f+Y%?UqBADQ%) zqQa z2h%U`&BT%P-Y*{(HRFxje!#e_^c?FI#gzxs?&mJ6mgd{`S2^|RP(!3#R7^$Zb(;d6 zSs;*EXfu`a6J&N2GW+Wuwt+k57+dgZ*BFj0G!L44kMs5~o7q}O>{=Tud*ywBKt+Wp zhAHehnT`W&yvOHmp2l}kmsc;QSfA`?AOAXEah6pkrSI)O&MZi#3}mFW9E0q_nDie8 zaC-Y!jM1Jtv4l@#y6vr6X(gwN%Aci)h!F}k(Jn0sQJNBJ81?gnxv7bK@$&vKF5|BW ztPxyZ<8#!hs-3U<3PZLFl65e^)mG(6UMil!Zf9QY(AO`aqmfrQ5}{E7{siI3WUqCP zNfGmFyf80(h>v`eZOf^?psK9A+@59b*5jQGTM|Q*sN`O%AOFj{v5(@_#BZyfP9PhJ zUZDMz?=DBo>%zR}8QF({)uZs^|CfwK6aPst=>a07V z_DwsI+xBal9WJY6_>ZSU1!En{o&u_hilO*ur&RKi>(|8Qd)Lby6bw)!s43O!k3kwU zwBiY1$!d*cSAvK5cpyt18tFd6L}40%)jsMsPe1ADHz_);J;;?7m zKyymc(Mc?M=-$GVbXg_Dp1BXSO$FnGSktE1n1=$e&N+0p*{zom7JSG|UR zUDu_$u9DrlgVELN7(_MaPYLB(oa5HOzPV$-a*GI!qp=WAPmvCOger)@EvUs==+1K{ zXMC|+-dZ~;e$g2~;Or8jFc@ON-gVhHy;kEna`X66o>wKaKXAWBdO97PBa0be?+St~ z&VQ@nNxR?s*fQ<1`teCWC3%Z$7*L{AaCR^VsFIsUqxHX^V z>=}DBCW&_J7LI15#;UyqYc1?WXa?p}>U3nUe>m=zYIsQ9D(E~dG(8T_>%MB=yFrnc zHQBb8TRlm5*ycXksvmKlS-{@M@n8d1QbyL)8aiS*FT03X@9^#$=Y@L~TQL({y%h)) zgG`Z5kc$0L-X&C6?gFq};>wW)uH?gHYQ2l%jth#%VM(wDVfC2C49NCC1@AzxC6{Cc z?=%(Pp&02n;^y21c%x-cx-1*qAng1H5ZefU0Z}(P_T@qrYT*l-!spGKy7b|2Dw~C* zHiJKlSA8xn*D$vlRahRCueM413zY0{04x`}t4pUv%Gxw|>^KaVyWw-sm8cxQsag`W z_gN5(xUFeegtI?OSACfO1}2>BBRrCET(LLTZ8%kIwXk zo-W_^ICMX(5SGn%iQl1>B%J(`7Ni;`K-vSg%4gQoNyO(W=&^`+6g3Q{@dw}Xc}cdo z)67KfUNw6s;zu2jTabx;J8cuA zv&Kw1c{akv+!E93ULIttG6+qx4>OH&xO;M3SYSSJDzWb3K2}`c3hHUv_h80rz*2Df zINere(kK~rmFYvqX@6@Zy7M3=-T)fd*^e%|U@R&gaTmrnc|%olRA9-nG_YV|X@OOyAO&}mMrcDny^REZ)YrSf(v!pmBrtCzApmVT?T+2+fPTRUQgDq z53ZdM@a`DDtC`ecDEv?)60vQvQ)(p->LI?o*1T|~Q4hO!&F%ZrXBmv8DZX({^Xmdj zm>8@{Y^uV&`YpnoNElf5!%+31vVX&b8609VQ?8&U!3z5rt+HsA2TMTgllu7R0bE&` zNy!-ATComG6>VD&HA+1`x>UpAq^j!C9VB`)>|xE{!`ME)ce8e?#8aASkcDL#^WIb3 z00OgN*`6kC)^4w9oz+VAb+7L2c8>rR%}p-`+eB02TkSQ2c^N-u?`vIyvI~}MSq_S| z${Ls_5_V?sQ4bA09Yymjh(p$m5AhmgZriz>`pzHy${k-19QuXPUaCy;Uh?4Zpt2W< zi2?{eVe!htl9&4f{X9ity zK!F-5jg8*2x>=Jj(Zyy3lLPk(NmH9q#J?l;XN_eME{alX&0Uit`dv>I3gjHxgo)lrxje7ote<@k zIEgU%eOy6v1wUv;GAd@H%pFmG+r(i(zU9PRoP2?j(@%>+HMEA6l~zud43lh*=z`_zJDqjorb=7>!O_BFcowdj z!Zk|MP|U~Vu-O@9x2z+EhBfe+IRCNK&wAQ>r2$F^gy^74wS=d1rQI|S5HA#=*$HyT)Rf8>KO7x_rCf2E0&;X(6#O;bZ? zEZ@m$^xXla3g)9Qwf0pcT!hGld;09quJs!&xW8JbP=x$+@PalGi#*$tHK9$&C`#%{+N(0Z${1y$uY2fCb4jk+sXntS+u zU{lDD0uu%}E)E|}Pg?sRVr!(DH%Ie#*4GBfw|hU;Eq9BL zmiIvGWD^q@_mfN1)6t%}SAv(O(q)`~!QZ4asFkPaVn2D>RK}IK~N355%F&)8(hpb%zpc5jz>Fxkypl*xo#Lh@EZSIG_2Dd286RdeV{(+j#YnXJGZ;>>|L%ZVk z?x;4~)5nfvxQbY7j^Tefu9}~6^}rPTvE8T^6q35#TO>i(uuDj~I64Gh#~RsYp6Kj*nro>BM84%~I9r%)0G0 zpPZ6|MZGDG9+Io3@5qJ0MQNJc<`b&fhF8q{zXA$FCAY4RZ*P8k7JC=e$7!c+=`G;c z)ebEOBs(x$s-ilRO^-O^6OtvZQK!tF>(@*jF3{rrvHmJKx_b!@q>iNxwCDM7~+5gt0hTSPPgGSNbeNsJG3jS-@7ivg@GKt|FJ z+!x*w*T+0zW}$xq%j?9~5J(>W%}?asn%1RwL|x~WlOFzuwXRmnsmVfnQ@s+B`&M{f z+RxYAVVsh4rj!5KR-kyM`)uw<7Onz6p=mW-ttL z48vVtT`E);UjoTC=g=z1;V>$O%Ik9`S5cn4|6SN}?|fVV@D8Al9Unn3 zeqnJ^z@{7haESeUYCZi=p<6(NlpV#(ujm0zDyL*OaLtCn(BTKzPQXNWq4>I3Dua1A|Tq^j!{sY{hJdqQ! zI(VRq-h?6=YiYG!)XvemBpO!qXJ0D zH6+z^`cgB6V%i0B9^ZB0!BAh9HZ>z-q zLa;k@?YxSr%g&aSXS4TqfQkNq-*7ZJ(Vp+^o_%Zb!}GqzyhSlvHpi$xHp%7?UJqBU z6uga#4u2QdkG8Xlu*gyN@IjtBG4pF?vHn1OzSS1Q4GY1p_LAJa5A56wKQHEBc)cvY zIDd>3W(m10aHoF0EJ)lV-BT{VEdAONiZ|1&pwDPnFmavCUMY81e-DmCw48_*{gTv- zcTXjqS;36-m{i(7D|$RW6GmIDqM?De6x)0;gr7d$aHLs8F7P&9JgI=BL_PhmkE`6J z`I9VQmwq)UF8)L=dUy2c$}s5lpi=tOdYCs3$Hm5jDAVNCBVCtML{dHprTUrp58PnS z4!wfuwv&B(yXp02U{-os8$@pYlauf1qKPX^$c2&UN&kU5ty#{g1}8sb0#-BHfX2(J?7z4qt+` z%)DpVh-uz1xy$Z4Ap~LU)qtwKC1Xw%r||EEu-Em~D^(L72fBNix!0NZ1ZJvPXgzb;OeS9>GK!mxgvT2D^_ z6MB=W8qY`-YFsQ~>WNr`&=I`Qz7Vl{pG|U3f*-9X;Y!J*y9(5+UG}_HGi&^t#7;S| z+%Q9$1Vq}dlA_1TtA&10i)W?z`L*#EiR!uKsmUM}9?DyoPqw+N#}5Vufa~W~aBGkJ zBY-=Ro+Y|cq(xfF!aMOp(XB@rBk^VHe=fRK*u2RJ)>mt#^_}<(FD+#zW6W)s9rsRZ zHnAx&&P7uQ29O%!)}?oI>Dv;b>b@B~yCB8G{?O=Bm$ z(D+UC<+;mm#Q={gO%=t`uvNl3bCbbtGx#j-qgfoGRDdZn;;RH#`_=wD`uTD`AL4G% zS`Iq}`S1llr@dLjopE+k^O9|SK|Tc*zI6WS5^D#nK%uoHH&pC1KG|F4_0AGE>3_BN z)j?T>-=B&gC<@XYigcHBDAL^xN_Tf-(;%sIcXz#nlyrA@Bi%21Uob$wJ3F&8``g*y ztbZ^J-uuLP&NDODw3=sC7nrMLiW--hP{3a;J)4)HTE6#BG=1Ld*1b^9d#Dpp&`?cp>@lFeiRI-?KlOO^ zN%)=x=xJla^UIs|>W7X9B#Jl^P%(KBy6RHh{KC*%NA)rcDe6=u%ad9$h+bS&WW2Fq zH@+Hd)5S`M0n=*(x(aQUV=nmadzIAXZW-uSIfSMOte%37fZc3E|9ph zJA6|%MlInCEE32=m8|s(b7!29HO=h{p5&Iv&vN?P(i ziIVmfM7ky~PH_+Y*XO-P#oG8V1VR2rVS`FB1kybPL z7jor**y%Z&HJ;kKRe27Ixap!_K9DmpL78^dWvDi{nke3Y_4xqV6b_JP8uk!F>3oEV zh5rLFX)HTsbC{m`XPRV!z7xIm%bgh@O;Y1%4WvkJa{!44Vd0ULEkyFy7Ic?UV+DXr zI-#*myTY$#xR{O7YDD>28YYS8IbFmV(G@ec3LmDN&iMsfEi#l1ug&hqKoA>=kaSBs zyxdTRWk5;vF`py$J@YInoOE$FvkfJio>`0t!au_c~Ol&Iv&*8F7sM%bdKE+u3bO(-gnNX_kp z(w~em&Ez?Ql&# z!2s-yp729@XbdD1oqMQ6CLUx052RZK32R1q>2g3F54s71Y$L!==yGli)meI(uz9c!*GF0VJvxj6$|fN4Nd*{G`MioMc7?h9 zXJbn$zc=G?0G#z0lp1Uy-fj2O|DE}L)a?J(h7eFNS9=b_#Cr;K+gvnd zQ%vNCc#*Y>D%FtHXCGa$WfY;*^tksPPalzmh$MV4G{L@jZC}3a+<GUIx$$e+j0JBp|Q{ z>xTa((071~N+jm4zu7-m3-1A-Pn7a5ejy~NLQ>$a1|C6!0|nS_bB7J^KKhuoqn~X# z8^i2`4apJr(f~3AwF0@FCNgxXu;^7W= z7=^k@04ajuLVINEC+Ep`-u@8lW$ykDARLI?h%aT=ETcV_YtuHqlFu>nc^3*kbFF_^ zDw|DIf5Am_<<$WUt7ZYg9j8FI+mp?`=0?c^v#8Dipv2xFle^GT zSB}{40g{>`<;`c!|4LwieS-<)Kp5zIYe|$r1UJ|msw!YXpyAWMS=iFE|JxXc+SD`1 z9pCl{!q}jb5Q*@x3?|_~FyhJnhT?=%R>ITo$heD`w>vSK-+lJHcJ{A60y$)k5JMsk zs775CmBILG({v`y#6^bBmz*m*7Al~h4u+|_}(lFo4 z5d0M{0@ov;?yKmjb)@6UwBC*yf8O8);L=h->vgzGyuf;3?}k3Uh8qb4KAu2<^(J{# z4T(&`DNIEC6hR(!Nu*{)5cp!OX2G09CY+d+XF|O&0$uqBO(mxCrZ$7iBrts52k+p- zwqX~jI%U`ZQs4uRBjiyuZomwk(10dat*tgMwcDfeH8=p;+Az5vQ@A>0$o82WjB z0Om3O)u)ulI;@jni|R7(4ZR}(NG3!gB*X~8S$C$^QQeS9n%2sCqiFr%$?v=%goV+g zno65!YhD>noLdhljRdTh<5{gq=bvke05VpKO1#Swi_mWh5uT{NvJ**y&3ywEMGMKF zUumLC1?%wz;1Wi(5;i$Px-~)*n|6tN-=+;i0Kq_oqrGlt5Q+gy!n`XPP5X##&0~bT zGvKH}pyil>o=4=`c+)z-AxrqvXfq;VM%qfvo$C+`O3>45^+nuTYKwrm$}{{_kc4U; znxx;D9k|J%y(vLCZ}xPnEm_ zoR)X5e?YSB5P`q^0R=U_^DX__7JpqNNf3+-KOMqvl-Qql0AIS z04Jv35F~v~)_-0tet^O=X-FZzMvbd6{`&f_GW?fp%WkYv^{Rhs3!(35>r^YoW zu`mK3cFPa<{$ML_d9Fk3^cXJcYjS%<3*Hz2hWEX%w#W4MdVZ~} zB?i!P>mz*(*9mt?!ufQF{(Fc!@eiu+|G-3O@SdlCj1r0JPZJx-lYAmTBmi_DI+s@c znR?gGz<0xQlFh3EmdoXPng9o!9|vA3mUKz}AV7^;BGs^YKxGs31aQ4l0cWEvPJF14 zQ`btZ)T?stMXSfpb0vfa&Vni~{0|KC=7bim--lYnv!)tcwcJ8}@4gE1QWQ|i%W^8x zQRABPzBe5szp}dDS?C^s2~xbBLwk%}?zJCTCfOd)`-=-b6yt8))rWtuuioE$PV`m5 zDOj(ItVB1DFPwI@KJLS2+ABJYA(JJ z$SYxD`U?13x=M&rEH3mTc6BdkM6x95h~yVxZP2Q1Zbztr;BcwR~K0PCY;)gD$`%&OsEyRx1utTt$PZ*VQLZh*2=qOy_sOd)*v%{{~Z){i)$muWH zVKD^i2S6)tT2K2jBZ8ye6^vu!8TQoV;RYt3$C>XHj=a7AL)4cnA!(gsp$) zUWR#kN{WK5Z80eSC_`B(M7B`2%9VoZzAqi@DSBLN|J3@?ab$n(1N>ji3l!*4!6jMj z@}WBk2BV<&Q@EzmL8rqM+y|Sn>wJ1EPHmwu)^vmSYx0(zxB`pUf#+o0t*{bxkWyCwD z%lvpw+krF)Q)#PynuG7%hjYUeB{MHt(F|uqTz4xuiX8_MS{No3J*^ad!@Tzd@esy0 z`VP)^D+Dz|eC?_=3l&WI1qw@Goowe*d3x#;Ir>e3rope%Tg_C`Dr=OoVQUWJDD+aD z-b$EYB$lF{uT)7?xhT<|C4J)oDa$(@opu?lt$Hu>k%FE6)K3~^)%8wIWETuf_4e7S z7A3euz1J3`U2Eu488|7_UIo|YeIX7FqwZ4~x@&smBQFxu#7f{_ls@Now++@+t}6P$ru;lkPklS27QCJ ztM0pj2N!wbsg-^!obYW$>z$SREqwxFRX)eqOM6Ij`ZHB^wx@3+i&C@%Osem2IhF5+ zH@!@Ll0AHsO(qG?<32;JP|Mg0L3Yu1I>rosNQYogf7ug}Fr1t+ z=*wp5+nBF+%D!^Q(ikW68f`#OQLeiOv}c(W+csw@ryN`Z(#;>k_XGBm^q*FI0Qcc* z`-Ob6OK3aRU}-4fvYIidFOc^$EW%sg>-X*JTKzDWKj(vOPKS_Tw!J5~;p4{U08VQT zjq7Mi+!DmNSH0;z6`hy$MZ5|WjS!UyVlDg1wUqeAz!=vTNyRMpA}ckX9bCR>#JP#} z;GO{Y%9aU2R3Zf76uxq-f_8QcAfse)d{sA|_gT-L)m2F0ZEOja8qF-xcB@lb9*Wfx zr=fD%leloL@oZVL1dK4*Ydm~bcZiEBq&jYGVPbRd7Xk7_J@^g%rkJAl$$Bd0UGPQ>m<~53^6$#utDf4#c-5X(J zN9;~T>cx|22Gs$pcgq9t_f7395m)E=N>55Zf_XB6dB&4BYu84b?6gaGODi}e*IpTG z$BEC)c`+WO_0*+p|E%wfNr<{$-4jz& zgs6Sk(SEF5ONl$|gM;(t@fFI(82nuc1wVF|vO8qPNtb5{8XGRQqAmC85yZ*W35O0m zIvR|Ve@7pHtKUkqHmBV$cr^c%)_HIYXS=BK%zZ%eXlUsZ7H)A&=Z_T(4F3S&TMo97 z;KoUUvFDP;dD&r`mi4X!eaI1}Qu6NO^TTdk$(cRw$1H4ABjQMNnO?Y4$-&x%&y7@2 zIyvt(y{^Kd2$y*FL65EsTT)rAV|S(^XG5l=hgxQlr^yYto z`~w?_ll9EG-xqamf@Xfvwevx!Mb@~p8QW$#3#!u<>=&@Rb;Jp0w+6~%!SNr{?>$)6 zl%*uRgeGYoyqYv}tpSPPIr|+yg>{QB>{ye-Iu~@*#Ccsva)nWfvh##7sho0Ftmey< z$CuXk(rcztr%$rhpJY@pB4+~QEYUM0)GL>!*Xu+hEAINYYOuhRxzomE^S@4k z@!6D3q#rX1w`|=qy$C(Xa-^Cc+LgR8f2Aj1j1RUBwtfG^NaA3rOJw{b5IXo|7O<<; z9}%<@kS*RWfYnSsWdD)GY{5xzh2Ynv9QX~eU#wVJN0vt+cqPLUmlYB1$iutQ0k#v7 zl=K%HoGEH&4`t;+ba_M7>hLLMisG(`gE?6;jrC(TstZpV=b5fbVRh#pe|Ew&)>@8^ zrquFRca_YW$yZ0yRMxKgF~n(BpqHgIu0I4G-kMUZR?z%(yx<0@e^szqF<|sRPJH8d zThr5%Qb45k!XmqdgQ^F4IHJAOzuJl6f#Fi$_Gj|RRzP^)A220Q62QVvW}mjD+|`V5 zv0qCJ_?U#XE!q7Qc9V%5quLO_VPp*CG$UdPmt16&YB-2xx>&CF(OzWccbujjmw-@1 z!?(Bcez=QTO6H0(RO4@Oq<-UZlR(_KkLfFGFz=4nH@M`UY)I~+bGpA4YXAnyv46;s zF4Vj9ZCR<4eytiJ#Q$T>pdbNNZb)2$VSYzwQ!MptXt9WXOnCQT(|L`tJ2PgY^KI!z z4>o&;dA9tRUv`2LY-eI0$tYo#cZ#M7E=r=4s4$Xb2-WE)JQG{ijh*B`59<+jcgUgoSw-c z7e=3|<^djXsMiwO+lMN?&L?Vb@VpMs3lO+Y@wkfg*GZWsgJ#Aqx>BpzyTjCWh^xkX zO|AE67V3pvx)>Lbg)W+kntyAyI<^SfTempHgkL_FyXCnJL|lB$nbQ5qD15nyKjfU# zpWh`$8+Fx^np$@fHMhM`$R*&3PXWGBjaRBB3XYy67|G?Y+eD=uqQno-`0`4!y-AVI z)XAtgjD+1K!?)7!3`JuW5937KAwES=H|>pa9LRPsA}s%jo|9<8hx1ck9g*|8;EF>{ zuz+!ODPno)a(ehyFJ&ZUN82dgN4YWht>S#R^#PQztd8;R0qtdy*3x&S%%^Rmud~D} z8wpLE()pZ+Ob53D@E+jK^fu9U!SguPcafqV-mCPTItP$WI2UngMBt7+Vxu&3ptL3) zg?shWaQL@xLrmJ1$tT>R;xaTJQjupYj+>H@u+{ zmjC)A?l*{uLD;X$Rb=U7Nt3cDq|TScY-PK%)beokGyP2J)7exLIf5#bi088zQuFV; z>bu20Z%#$Ctfs;3Q?8IUjZ*I8C}QomEAmyUI{T)KmdLGuL(fNXx#vg|UR2HnsyKf` zaxGrt_sY1S$b05^Y&yTQ$VabprS@bem>xnd*#A~s!ydWO%t^g$6?#<&{SU# z>YxO9lyk1#MQw|SvLmNaa-j4Ft3?Y1^>$n{z_sS%!sXqFf-z73Arc^K5U_pYtE+rc~*IUV#$fZOKjV=SI zupe`uT{Se$g{FzBIQF(`c0)8CjDH_EYN41*DQ4oPYUF~aY3f?4FzssVbJy7H7IaAM z@yz&bRRW$MBM>QbM9;IV0OQixk6IOKBrJXs&F^LBNW;g=GSg^<1z?MHMyyp6RU(2~Xjn=BPk#-M6T zo^)~AC^)~Z%j)B4j0H&balp6P2~JxD3nQ10n-hCc6;8CPvyB@2*xGPi@^V?((zbCi zzsizl@usYELhq-rVH;m?8sYhCosZ#lcz(uHQ7zHeu$Z1wqncSou^%P&xI+Z$6D7m^*FFeF#|5MBPEcFnq$!*<+?A5GG2)M zth*o~Z9wYIsnP1%ol>@UcPI*wlxK$0aVwD`Z%eD*Z9R0?NE;g*5^zxw zwI3$!>u0XCU8yng{aTHr!9B2~Z7kOhz>X~Ld{-jQxodmKlk08Cb1Ov&=TLJ%dd}`+ zMt*NoVL^+ky)SiWq-M`ZVuy6|G5i1%{=k6Zvu0(rV%|)9{K3;^RqeTHYP0t4qea)! z6UzG+?iLeW1)tN#q(zDxHT4bJ#SytM?A8L#E%UGse<6&Tl|Ltr%4eqH(^=B{0`=Cc zP1FjDsjg)@4Z9=ux$+kN0rt%Zb8}fJTv-=q%08zr)sX#&l3gcNJ+ClJMERd(q!E4x zUoInFDGsvFk2yU|_RibE;u%f_;!T=1whm)EzV?sjHXhm<_Vrh~5U7q@*-5EV3iLZ~ zX55DtU`~^vrjYFN8oy$ciIpS;vyT7YyAPJgI9Be206o zc0ohEjKL@n-M}JA%G&H};^*0-9HY-gYI+Do==Pa3hBcrEd#l|62cm1M#q^smTD}A& zD*SOof%KHh5D3vQ03njLVpJ!&D;@V4tI&_uoqFY*a1@%0k}TiQMS!5n zR34f;TVErCh^l*ihu=`8l*IF6P(nTn0*Z02j$JtgL+G4ngU%SYv1Jz)hIUhHQ#4PW z_!a8n=d3MZ0FX#WG{)|FBH%JuNoWqqpqMWA4qMLoAU?Nc!( z#@*OF#;b>D@QZ&cBH@8CH0n6B$EpTibddo;^<$bxRiFo>He7A?v?tdpMz5*{y--1r zIG+6;wRLK$RO?B+U8#O`Y6t)rbU~Ru`D~7qSo6n@D~F&1UOc_l3rv<)%icNtFc2At z80JE$Y3?vv?Lj&MT}26ioc~j~t19c?f4hq5dR9S7p6wqee)}`}&)1%t_B0fZYcqRttNsHpuz9I{anKq1Ofu-3VKapTur5;3Z!nX zYR7-Y-F~gX9$5GejgAfGU+caN4HS;QARa@CbNzP>9KgblQ4134T~?`G0h|oyBQmPi zw-UYl*B-T!iX((QeHlIr_X`5#oU3{9ayLA;_hTwM^G1^)(kXIvTvRy%O_^9uY~mVw zPrn|%%~ks9XLykJ1u)S)M=R~6mLDE9L=$Grw#^5IKST5D{+1Hl`MyEI+txL zer1j#;Ka5u5ra2OLzs6v zLYn&g#;6c!YO#kfHvaSL+T$ltOCWPbN8SDB3<#$niqIK)h36l74nyz|c2?Lg|B_Td z?Fa56RWflTXa>sK<1fmZMmMGP-$c^o8lqyq>?Z@Qu&#+{EhX=Z_q%_y z89*-~X+R3RU*XkJ#J-q=pst`m9&4c%lLVkObE> z^A9h306XpchmQdZjUNy*@;8>O|40lWunp^9E4en+&ut)m#6T0MnumcZCzMhOfv^4x zxad&`b3cl!s@=cy7a(N*KLbLhKW9J?Ax4a}4cAQ!U_#F#;O6}Tr(3EjK9P?`^*742 zBYCO{^Tr(mEVdU|weFKo1I0#ag=7gIZZ_PQa(-S8*VGNK_5u}2@@GFVg_l?wzY}0r zR7;Y4<=yO%lw0v#y6?+*q};wvq#E@EdsVTO)q}6nmoSs-Z}18MQF%U8^q2<$N@OpQ zZtwzxeE&Ta8Tu1e2A4X;jHwsO-q)#dsiJwo@Tl__kJbt5>Q~vBpUD|__9`E+NcjB2 zm4UX9VuPT4jqd-%ngP&d3#0*W_!a+E^ehnjN&t5m<{!45|Ahd$p2)u(-E$lQvBj~B z!}xa{z{jWLcF2@$E)hvLnBIyH2#QFcevHR=-O7|)u`x^+LBYc)$^G3~mF(VFtL#6g zZUKDDKJ;Y|6-{4n0m6oHYhtKcsh;1gj6_v$SfxsJAaFjrZF>cz09A{BsB%5Nx9_&d_XBVfH1jlexY1M^k-y3*uNFyG#o^meW1VW&n7cJXYuz8xQ~IQF3|aR$fR$( z6(Aa?CQ%9f!+O9nY&_n>q5oek;h13EqW0mvt9 zqG#g&n2?v?B32@Q->WVs*Jn2Y^u5;qf9Jo524q70gFp}9!JIoaJ$`_8Vq3p{Lx~+U zqr#a0KG6ffCu)i%+H!RN)l!P|*3E0j6BkV=LhAUNIbvpZ2VUvgPkiF+W-f63x}RxN74_NSpr##5H`)$h-KVwP~9{i=y*Kc%RMC)3hQ zzzAU+`tBS)`?@;cHNa(sr4wV9Fw&&sv@Ft>+(mYL`+YQR&Y}d~WC>>#X4eg+=^2F~ zL=iu0v@$r89m>Xo$sVEZ857Q8_&w~IB}j(_;kegn+2wKkXWGY!vDcaT5lP^9LeV#( z*ZdCN9_2uPs8<|IK5UOviJ)IBi8d(wb#)#;4pe(V%+vJZ23YZ@I#mT!_Hexz(e>dk zeY9!dQ@a!r-Xz+8LW;j^q5ryfkV)hqki#J_paq@D$^*aoQr;gfE3+=&w|GbUojWli z;|%X!7gdHQfpqaZ5D=3ef}dWJDTQqW@B-Gni=~ndBO`8Sczc=5pU66J)Wbx;3o-zV zT9X!1;}A31EusN$0h+fxGTGu>^4XYY0=i@Vp^YIbz*6J@R(c3h)sT`eoMDx5Ysp8J zDDsOXaAHlND%a1q7T*)f`D;8HbQBSt&2a*a8dk{tbM3F}g<`wli-S#AvR00+-6K-P zyf|m^FieXljL#EEBH+24mB_{P#1PsYWn@KFu^7Jy3n|dx*kq#yPAF5$U>N(W2?tGZ z)QM2NqIir#Z;chr5t+?amHqsHY3_ALZIn2L6^kVbNouG;$h(+e5*xI`y^9M|ACGgU zEz*I5-Lsgf-P7F@u9S=#aLiP2Y$O|A5~K(2^<56339<7nR44}D_T(qFP~NI4k{7-2 zQ=~V6ovl1~DtCUgo*)xf_}5Fwx6wACpk+`o9oKUAY<##P##E#qXId7;TNu*$;oa2u zo{f)diFkapqgEEg;aP1@Ht;pcnei&RtNAF8#;p4?P;V>;E>+)dh9)H$I;w>+BwF)v+04Wn53JzBUj`Sitm#4BC@7XnHYvj2ggU?{;Nea5qTes0&zNrje9NN>DzS zKorq*)x~v5K6BpkG73{A)f_{4kkVg_KUkAZG0?kWd@|*K5g#+kbt2R!J!El%SAoTn z0E^YbrXH=Rg*qNpQs2n!OP1uAf0#BLGoG$+rM?!wNE-r{Css>9jjecMIpy@ z>_R5Ix$v#w`c0;Qi;x5?>JApYqN6alcO7J3?vDkGp%Y20Xx0vH*PUWp^XnI+5ytMz zCII!~H*B@`r@Xw4Vu}2!;!pBkHfElQ7qb{Fd>-3t7tLLbo}9zRXQNFOc6!cuU37o} zkl`Om37dSwg4QDsOs4Kw>Q_Ums7lohh$)dbthV*rF&oR6l&+_EjCXK@32yJ+dn83a z715)`2&W{nx8o)3%4s7bSTQ!Bqz!LetX^Wv)9+}ngk1R-|E3@l#%X2DB;+q5x5!(L z2xudXI&JXSi1ncmtXaqs=Jh6PvPUFqR zAR}V!hml?V9*PZokGO3&Od}O-M5VG=VlYo_rY@w(u9Bu2Bwqe{Y2+{KoG$#<#Y?lC z?S$e|vD$=@7?`kMHIzgp<0rE>0&4g0zkO zbp!qU4Gu*JTk2Tnh-EU1uLk>J(<;KaK2tr+=eu&=o6fb7hdA~V_-+qR;Tq7U z-MrdfXhGfH42PzBdfnXhAcqDX-|+@*ZZu3BPU?DhcDJZf)}C7#pLZy59Quq1_#RyM zRe8&5tE!)kFuO^|ii;T=PFkVOFMSwdGe6B~!vIRDlR`E!wZ7x=tK{?AcB!V4{TqYs zl^|Ss5IRyim>%m=DnzN6)343L&2g$F1KKH=bTrHiLq#|2s9;tpY&uL=39OJcdy4fJ zr_4#7DqV;rpdknUvmteQqt>2q_C@#6RQ(G# zS5-t|f$Es9f*sRQ^jx#02&XAWRl!NTz;9_rBN?1%)SAh#1R33nTP6y^b>lP%YapO6 zi`z*|ij~6Z7rcS5tk!bTx%&p)^sn~{g{G=5p1WSWR|(C{d$~W5JTn=aw%cLPd=%6p zf#p}MU^E2pCs5;^xbs2HY?x8%v$2?9<*3aMKa|!&73LX>w6qTZLgY}N`>PoJZk zDir9Mi*&#J=?E?!GvnRwzS*v1!a23+nT**28j|22lKgA02>I3z8@k2#<-k9TU2S8d zzW9Tzv@DvGh=>znme;D9JMwKMHJ3%5vWuBRK>{pf$J-53l{MLDjDF%JWg8^|9O6-t zhB-pxf~v+B?K(Eah5JmcU(U+Ro5C83inqQkk81gwue*7bN4?`GsXZ@fxf`{4jgJFg zLs^%RW%Cc53--Gnee%aOWEqs)Hg)`diGQTtS=x0|Ueh7qByIlwjlpf)nZ@}V5j!jA zCeMz$^5%fCUFCXHYVKCvD$teMsl;1v!_~&>lX8S{Ic*WQP>t0y zPd@tE#S~@sAR12<3U@TqexTW2?--QD7^o@`@zixS?U>LA2Y>6R+c}iu%9+EMsMEIl zTh%DFLs=iSNQQ|}l%_Xit_&)c+vVMZ5Tq7)-4 zY0)1{MF)&W=?f(r>oneNC2cw$%LS;Mg^#L8t`2Ydff9RV)Ky$7@3SyrHX~Gz?(!59 zThLTd{F5G2(t)xDKDMo9CZqYDASKUyZFmMT<%lsit-r>2N0Mvh&qf z9y2?lr@>1cGe^^|evKi9($C$<@@CprdXIx%KMe3Sn0JbudF|)VHaCbXRAg)O@eR3W z!#GqnLQd?g%tfU0nSPd&)$X|!TQf8F=0zEmQ&CEfJNV8yx6zJ7Tno0i$UggYO%EqZ;)Xh<>SgOiL_wL-Jk&Gx_%s)km*^Q1E4DEta#vPR_dTQ}#X)H&Q zn=#=9{d2+<0nVBut9nH{{!lOzPsLXkc}``bhkKZ$AUO)e^I=3#7KY%RZqQDS`l*_I zxM}~^6i#n1jzj3PA^rft6bFqyuV-CcjhC$^f8SUUvV^8k6iu1VTF~&KV17DNvqerF zL(yF}=GceXlD&Neg7LAo&qliNWNd|%l!!SvtfIqT`OI!*iInL18rewp>?gkPL{qF{ z#xx(hM}>r8*0ttH~+c>szU3MnML_X_YWFqV!GB8r^nYW!fmvnA~ zFwypoKyvbC`O7xW;J2LgXcu!*(){Fm`0Mf&T%j!r{Lw0!_gKl$nmMBXiazy2r_s~9F*N7B+x99Os(38Py^HL9{kW(R z75X`wl#KW*+wFb%0V|*B^Ba*Z70dQ}lrL;hRJ~*(UTISyoV~HzBJ-Q_A!v{UnNbWi zk}~AC8BAUTRS%YJ4c}BODEHg@5{g)8dV1;OT9~zHS24_w^!?@JR%2R}+WZs)=e?;! z^FfDiyK&r8QnU%eg{_WpV;Rt+CsyxSV2<&=T_^IwD7PgwT=a9$Qw=*=Wt`mK-HlJv z)sN#199OP4REZ&XE>;76q~|vhxMo&=9;^yPd896KDgnA0TPme z^vR)YPEUo)<;SVY)FUOIr*gfuF@i-;f1tl2Do=0~B3*5JfmMItgpDsP$*1(jzEqg! zL_^p{t6|&kjPI}?=3|9Zj8u3HerEo1<~O90H%1dQTxxXsR7e|pxJi4ezP z!LVk$94y&=oe`fOw0#T?4=d0I3l!TAwXC|H)ff7=HJPSFKdunovX-I!DsGn>+~NG#+6&hL%&0y(Ibn7- ztx-vqoVJ*=oOq0xv5>2{{dGB2CS~!~u-eAOE(e}WGYhK7~^@W>j2seFY-)zZ2h?QoB_i-1kzsm zw`*N0Lb!rW;eIr0ZC1d=ecwgRpieBC&K(dB6#Gj1=LAd8_ge=hLD6+P4c%WhS76f-jOvq90BY3NQo=3fAaD%PsQMO3$0W zG_xxhj5t&~1BImzT9Qx9$>D|eVI0`bx%`Mg ztn5DUJ&E5pGGU-F)Y;_sq#h4oHBjWLT~F|% zb2qjBVAZ|9r!Jt#WP}0D)Io-p+qou8voxRP;UV~Cv^j`!PDY!g8BO~{EZMHQJI!>V zQCgA1b~f9r+I)|^d53m?Nz&AJrRx}FYZ+t9xgMA8L}J4(+uw_IT*x(kRez!e&fcfB zq&f@UHJBp9i2go7w`VLuW&wywPTHa?-8kkpys^96%A8XV$-t=Vm+`u)zalkXhh|<5+v-OVq)ics zNoyb&ryV69T?Z0+wxb;Be;Fcn3dx6R3OKBV%ADj@S+kj+54?NIE{C*iGuC$UF+a@_ zsgrRO4PDHTeLUBC>F$7r{zJ9U>C*y)cQCS9w%Mx$RxOsjIRftQ54a-xUCy)`_80bf z6hG37ek&{!3PqFFJ@ln8!qt8%uM%Nx8)7pIZ;#l9MB*2IOM!zYK?fKscB9e1dv zkj-&;`lv5nq72v~rdvBt=ZDK|@K_2HtHKxek(DK{GH*nTq;`MfIUcn%klI=>l?v#= zA8SQd|LUkrWlXkm7k`y)Q^MBP=8tIamWw6v-7Osp6u=2=()UU%Q1UZ~{OkP(LrF>iUz~`6rVnyRp30{v z`r00X3=5i75PfoU7UbK5QuN<>d)i0tmoYQXRN74+VKrv0TJFEeH!(RgrEs%qP1kNd z%*bdgOfw!{H0YUg@55nfr>i{Co2toEXk4%8iXDu()jo=5sqqEZTA1#!Mj)}n=bPyl zAlwI+rqjavwH#-}Q(t|@is_K2Y1j4w{er_E)_ z;r{Hvg=8NkjJcVwA+P9&?@a%!%QyH7*25BPpDN7A#Ez7j6};WekKhPX*TN0WG(G;x zfPl1x_&U5BRCqI1Ug4cBn9d!)>oyRaP8M*d`QnY*Y(~f?>US>tZe!td zC)O2WxcHqfXMwld^H|RN(_gDI4LU~qY}9Rm-`7OkmghS57HD!s3e1;{RtaB@{@#Q} zT!Jx=*qAnGB)jA#J*UnI>e#?$IqA*}FPTi~fcDq*pDVW~h>_iCns~zQqrCGS6l0SKrwpdLUGA@e zb3@;-v7T`g5n*!=WGdRr8S(K2)GTAmkH;D`M!eei>oQ3}ef1Dc79sLG&c+#U3;@zfE+><;pki5j#~4l$oXmV>^G4+OML>V$Uej?Q{k7fj}}C<*pPpIO-+ zmKrUPbgc!$7FqYPZ}?h2Z~QjnGhNYt+B>(?B`z(i89)IKg^}I83F5}1&0r9*ZYi}&(}Ec-*Q(0R+)+XLJM+<{z+mEXZcp?9Zlp;~_h zngv}8vDfxPwM)_O|M*h0JtA8C?0pIbji3LaF0A|blCEGZM|kYe&Ga8x4~oF6sshD8rE_)yv#&wg`bhGBTGzBZDbH()rVeF!b9o_NuSQMMgr zyehjJhE``i8I7je-#4@_Y1|XwBtX%Mh67=HYjwu#pXUGK4PRuiSB=>{LWf@T;Q z&I+6ZOuI!*8Q`GI-6QY%6s=~1hNHXRh($i8z8A^$69rbo@ot2=0;cEdxzeA`E!(2#c_cxK8$ z{ev4?xy7PZW5U#T7^uTGx=}(1!2=7XQ4P zGMSa^(6@7~)tSWWpMj!sf_OFwr}#ghT<3DeFt|`}4FN7fIS7gE1=Kk0WB41%wpy28 z9>u{j;88GWb{TBHfw!okVl7XnoOc6Qr^n$MN1<2q_Ik7?4Bh^<)oV-rLz2=|3= zkm*uO@G=1TpYJxTkdHQ9GsGb#c>@w*95U?tr`P8AIV9m1K&9xgNBxy_g)sLl+#@Nk zw=aefz(f=PQ5h4K={sm#_+FpMCC(x%R9Y)To zU`|a087c^Bgbl2{87_qBKYJf~E4)l!_$KJNSCx=5baCV|PN>MQQ*F0lJ)vGAUE^*p zB)X-BZAmk7d#G`UzNU>i+F)(l&j0j%4Wefy=e8?eg(j5a@y&ce`_n+CI0mkTz5T}5 zijhPms)+pdpTEOD2+_ literal 0 HcmV?d00001 diff --git a/img/core.txt b/img/core.txt new file mode 100644 index 0000000000..26c462ee43 --- /dev/null +++ b/img/core.txt @@ -0,0 +1,36 @@ + ┌─────────────────────────────────────────────────────────────────────────────┐ + │ │ + │ IPFS Core │ + │ │ + ├ ─ ─ ─ ─┌ ─ ─ ─ ─┌ ─ ─ ─ ─┌ ─ ─ ─ ─┌ ─ ─ ─ ─ ┌ ─ ─ ─ ─│ + │ Repo │ Block │Bitswap │ DAG │ Files │ Swarm │ + │ │ │ │ │ │ │ + └────────┴────────┴────────┴────────┴────────┴────────────────────────────────┘ + │ │ │ │ │ │ + │ │ │ │ ▼ │ + │ │ │ │ ┌──────────────────┐ ▼ + │ │ │ │ │ipfs-unixfs-engine│ ┌─────────────────────┐ + │ │ │ │ └──────┬───────────┤ │ │ + │ │ │ │ │ │ipfs-unixfs│ │ libp2p │ + │ │ │ │ │ └───────────┘ │ │ + │ │ │ ▼ ▼ ├─────────────────────┤ + │ │ │ ┌─────────────┬────────┐ │ libp2p-ipfs-nodejs │ + │ │ │ │ipfs-resolver│dag-pb │ ├─────────────────────┤ + │ │ │ └─────────────┼────────┤ │ libp2p-ipfs-browser │ + │ │ ▼ │ │dag-cbor│ └─────────────────────┘ + │ │┌────────────┐ │ ├────────┤ + │ ││ipfs-bitswap│◀───────┤ │ethereum│ + │ │└────────────┘ │ ├────────┤ + │ │ │ │ │... │ + │ ▼ ▼ │ └────────┘ + │ ┌───────────────────┐ │ + │ │ipfs-blocks-service│◀───────┘ + │ └───────────────────┘ + │ │ + ├───────────┘ + ▼ + ┌─────────┬─────────┐ + │ │ fs │ + │ipfs-repo├─────────┤ + │ │IndexedDB│ + └─────────┴─────────┘ \ No newline at end of file diff --git a/img/overview.monopic b/img/overview.monopic new file mode 100644 index 0000000000000000000000000000000000000000..c2244bc890a8e99d3d47ca3f0820d482ad0cae43 GIT binary patch literal 2095 zcmV+~2+;TcO;1iwP)S1pABzY8000000t4+_TaTMK6#gp_&qTs^d)`)+s;$(AYTLJ} zibz5dwi(C*X**lZe_vlPmjtE(#&gN`0f!L#_;$|uJ|CO>^wQJgMdSp{EKz7h68nuQ)^oWzwDQlMH%3=_>8AV3j z$c0)39~>#w$AukZSv719m;6!<|7IU<^Li+l7%ZAzC|VD4xIgT|rIG}s?(afbE|30M zB*)ujl<85B*`(S~odN3<$|v`YN@N>WVe&1^RU5UzDDi=`3g7DJ&_0L@`#=Imnxb;= z<0M+F!+f`hl5n|?WCfdWpGUs8Pgh@?Uu{NhNV-Euou)FC5_j=>9VJzEIn3+y`IY7uhjtj194qRvLKOmb|#z%dbebAd9!LtlFDH>d&znjc}{m zrmBOOM-KH8){VgsYwEpy{7g$#Fi9&^`}O26$o6<%KzPV2S|+55W;u{c{RvE4IvYSjHTbQhNY1ZhFP}H?0M|DlfIf2*naX10gWw`pfmCiX?*Eo3Qt{a(7 zV96q4?L2}$Ofg-_<9`)&V(1&dJAU~Iz_eWjQi&sM| z&L*|jYEBf#^7Y^fNh#4<)x}9cA1B4ER20k|a?+DphHz36xaXu;4B@1djN+sKb%Fqp@z9LN7(K^D{-WU)FT|jbfZ^XmQ z6=+5S1~Au3b)S#83NVqlLjGt`=C12cd3`D`6@i}1>yPsOT}MeASppo2>5}#K4j_#H?YWL^Y{1PLun|&&ek{F z-Kq>RH~K{bXTctddPD;;8Io`(E9dz6SvmN<6*+P%aG40|^6Xk#TkQ`h8CX+$_3;PJ!{-(jNpD#>4AZXvUp6gJ`6i zf_3POac7zuZyh-tU z=!{WucRUagcUuGe#V{WVMj^FkCtU#YfTulkL`@{2oo>4uxVjx_)2+2LHXNq~qi#QY z;?c`@sO+gCyN_WJyBt94Y;EA!zRBWMZ*EkP)AGiO1Xd=%%28L)Spq{F^G`6n*0WyF zE&=zAem%SMl?wZkHpR|dH0XW@4e{rX7r*v>AMgTRBS06&i4bkZiLkp^u{ASPS*|rR zWNjCbYm5>hHZ@9gg{OP44}zh`d#F_yid`-++O-V&;{*Bxe|#`#@j#g~CN3U75~2>I z9F+el|NBRs3k=I=@uNpY^!Yz%&i_I4R(T^-0>=NvK=uB(K<_ literal 0 HcmV?d00001 diff --git a/img/overview.png b/img/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..1262c09fbe90d426c4d5895bf2d2ce75ec0bc74d GIT binary patch literal 34348 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 OKWT9Vv7#6H@BbgZ;fc`z literal 0 HcmV?d00001 diff --git a/img/overview.txt b/img/overview.txt new file mode 100644 index 0000000000..5dd7a5a275 --- /dev/null +++ b/img/overview.txt @@ -0,0 +1,17 @@ + + offline mode - uses IPFS core directly + ┌───────────────────────────────────────────┐ + │ │ + │ │ + │ online mode - uses IPFS through http-api │ + ┌────────────┐ │ ┌────────────────────┐ │ ┌──────────┐ + │ │ │ ┌ ─ ─ ─ ─ ─ ─ │ │ │ │ │ + │ CLI │───┴── ipfs-api ├──▶│ HTTP-API │───┴───▶│IPFS Core │ + │ │ └ ─ ─ ─ ─ ─ ─ │ │ │ │ + └────────────┘ └────────────────────┘ └──────────┘ + △ △ △ + ├───────────────────────────────────────┴────────────────────────┘ + │ + ┌────────────┐ + │ Tests │ + └────────────┘ \ No newline at end of file